您好,登录后才能下订单哦!
这期内容当中小编将会给大家带来有关如何进行jvm调优以及大数据导出报表优化),文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
前言
记录下优化一个项目的过程,接手的时候真的很卡很慢,正常来说不应该这么卡的。但是具体问题还得结合环境各个因素分析。
前端缓存
原因:开始着手优化这个工程,大致上操作了一遍,找到几个特别慢的页面,查看了下浏览器的请求情况。发现了2个接口请求的数据量特别大,在6m左右,6k条数据,在夜间没人使用也需要请求半分钟到1分钟左右,这个2个接口是货物数据,用户货物下框。并且在整个项目中会频繁使用到,使用的人数一多,导致个带宽被拖垮,其他请求的响应也变慢。
方案:在登录之后进入主页面时,就直接请求货物数据,并缓存到浏览器的sessionstorage,修改了货物下拉框,直接使用前端缓存的数据。后续优化了下,在使用下拉框时去检查缓存,没有就请求,并格式化key去缓存对应的数据。优化之后很明显,没有之前那么卡顿了,响应速度也变快了。
文件导出
原因:中间也陆陆续续优化了页面的查询和一些写法,但是都没有太大的影响。直到前阵子,一直反馈特别卡,卡到服务无响应。观察了一段时间,卡顿时,服务器器的内存没有飙高,但是cpu很高。发现出现该情况时导出excel时,就卡死,然后一直无法导出。跑本地还原了下,卡死的原因时取出的数据过大,大概在2w左右,然后需要对这个数据进行poi的格式化成excel,在这个过程中,原设计为了通用处理对数据进行了转json等处理时,内存溢出了。换成直接转换成poi,还是因为数据量过大然后内存溢出了。
方案: 当时的方案有2个:1调大tomcat的内存,2不在服务端处理。嗯,一开始时直接调内存,但是因为我的环境问题一直调不了,没办法超过1g,于是就直接进行了方案2,在前端将数据转换成excel。
方案2,在前端导出的公共处理中,获取要导出的请求数据,然后将数据转换成table的html -》在添加excel 固定的头尾标签 -》 添加a标签,将文件进行输出。 注意需要将文件通过blob处理下不然会下载失败
这里贴下处理的代码
/** * 转换成excel * @param fileName 文件名 * @param excel excel的table html代码 */ function exporExcel(fileName,excel){ //excel 文件头 var excelFile = "<html xmlns:o='urn:schemas-microsoft-com:office:office' xmlns:x='urn:schemas-microsoft-com:office:excel' xmlns='http://www.w3.org/TR/REC-html40'>"; excelFile += '<meta http-equiv="content-type" content="application/vnd.ms-excel; charset=UTF-8">'; excelFile += '<meta http-equiv="content-type" content="application/vnd.ms-excel'; excelFile += '; charset=UTF-8">'; excelFile += "<head>"; excelFile += "<!--[if gte mso 9]>"; excelFile += "<xml>"; excelFile += "<x:ExcelWorkbook>"; excelFile += "<x:ExcelWorksheets>"; excelFile += "<x:ExcelWorksheet>"; excelFile += "<x:Name>"; excelFile += fileName; excelFile += "</x:Name>"; excelFile += "<x:WorksheetOptions>"; excelFile += "<x:DisplayGridlines/>"; excelFile += "</x:WorksheetOptions>"; excelFile += "</x:ExcelWorksheet>"; excelFile += "</x:ExcelWorksheets>"; excelFile += "</x:ExcelWorkbook>"; excelFile += "</xml>"; excelFile += "<![endif]-->"; excelFile += "</head>"; excelFile += "<body>"; excelFile += excel; excelFile += "</body>"; excelFile += "</html>"; //构造a标签 var uri = 'data:application/vnd.ms-excel;base64,' ,fileName = fileName || 'excelexport'; var a = document.createElement('a'); document.body.appendChild(a); a.hreflang = 'zh'; a.charset = 'utf8'; a.type="application/vnd.ms-excel"; //js 大对象,解决由于数据量太大导致chrome导出出现网络错误(由于url长度限制) var blob = new Blob([excelFile]); a.href = URL.createObjectURL(blob); a.target = '_blank'; a.download = fileName + '.xls'; a.tableBorder = 1; a.click(); document.body.removeChild(a); }
如果出现excel 中数字过大出现科学计算,添加下style,将格式定义为文本
`<td >` + value + ""+`</td>`
方案1: 后面还时折腾了1天多去调tomca的内存,踩了很多坑。百度了很久,在无意间看到一条评论说,是不是我的tomcat 的版本不对,32是无法超过1g的,于是下载了一堆版本的tomcat,其中从官网下载的tomcat-7.0.65.1这个版本开始,加入了url的安全校验是无法使用| {} 等字符的。下载了64位的tomcat还是改不了,可以在conf文件夹中的tomcat-users添加用户,然后启动tomcat,他自带的工程中有manager工程,可以查看tomcat的运行的内存信息和版本信息,或是在bin目录执行cmd命令:version
确认你这里是64位,如果不是64位,1:确认下你的电脑系统是不是64;2 注意,确认下你装的jdk是不是64位的jdk,很重要。我的jdk不是64位,所有这里一直显示我是x86,所以导致调不了内存。还有,如果你跟我一样,电脑装了2 3 个版本的jdk,但是你的环境变量更改了,还是不行的话,那确认下你的环境变量是不是修改正确了,尝试在将path环境变量中把jdk的配置提到前面来,可以执行tomcat的shutdown命令,可以显示当前的jdk使用的时哪个,如果还是更改不了jdk,那就跟我一样修改tomcat 的配置使用指定的jdk。
在windos 环境中修改catalina.bat文件,添加
set JAVA_OPTS=-Xms800m -Xmx2048m
重启下tomcat,通过manager工程进入管理界面,可以查看下是不是修改成功了。
上述就是小编为大家分享的如何进行jvm调优以及大数据导出报表优化)了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。