关注JEECG发展历程 关注最新动态和版本, 记录JEECG成长点滴 更新日志 - 技术支持 - 招聘英才

JEECG最新版本下载 JEECG智能开发平台 - 显著提高开发效率 常见问题 - 入门视频 - 参与开源团队

商务QQ: 69893005、3102411850 商务热线(5*8小时): 010-64808099 官方邮箱: jeecgos@163.com

查看: 8984|回复: 5

[EasyPOI] 导入文件内存溢出

[复制链接]
发表于 2017-9-19 17:22:33 | 显示全部楼层 |阅读模式
之前 应用一直稳定 运行,最近开通数据文件导入功能,发现经常系统无响应,通过 日志显示 内存溢出了。

也调整过内存值 ,但仍然存在这个问题,请大侠帮忙看下,以下是日志:
SEVERE: Servlet.service() for servlet [springMvc] in context with path [/FGM] threw exception [Handler processing failed; nested exception is java.lang.OutOfMemoryError: PermGen space] with root cause
java.lang.OutOfMemoryError: PermGen space
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2895)
        at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1173)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1681)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
        at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:282)
        at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:243)
        at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:187)
        at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:322)
        at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:303)
        at org.jeecgframework.poi.excel.imports.ExcelImportServer.importExcelByIs(ExcelImportServer.java:322)
        at org.jeecgframework.poi.excel.ExcelImportUtil.importExcel(ExcelImportUtil.java:86)
        at com.jeecg.zygl.gxzy.temp_rj.controller.ZyglRjTempController.importExcel(ZyglRjTempController.java:363)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:601)
        at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:175)
        at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446)
        at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:434)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
        at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.jeecgframework.core.aop.GZipFilter.doFilter(GZipFilter.java:90)

九月 19, 2017 6:58:37 上午 org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [springMvc] in context with path [/FGM] threw exception [Handler processing failed; nested exception is java.lang.OutOfMemoryError: PermGen space] with root cause
java.lang.OutOfMemoryError: PermGen space
        at java.lang.ClassLoader.defineClass1(Native Method)
        at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
        at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
        at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2895)
        at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1173)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1681)
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
        at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:282)
        at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:243)
        at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:187)
        at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:322)
        at org.apache.poi.hssf.usermodel.HSSFWorkbook.<init>(HSSFWorkbook.java:303)
        at org.jeecgframework.poi.excel.imports.ExcelImportServer.importExcelByIs(ExcelImportServer.java:322)
        at org.jeecgframework.poi.excel.ExcelImportUtil.importExcel(ExcelImportUtil.java:86)
        at com.jeecg.zygl.gxzy.temp_rj.controller.ZyglRjTempController.importExcel(ZyglRjTempController.java:363)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:601)
        at org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:175)
        at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:446)
        at org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:434)
        at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:938)
        at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:870)
        at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
        at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
        at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
        at org.jeecgframework.core.aop.GZipFilter.doFilter(GZipFilter.java:90)
 楼主| 发表于 2017-9-19 17:27:31 | 显示全部楼层
本帖最后由 wuliang 于 2017-9-19 17:34 编辑

代码如下:
@SuppressWarnings("unchecked")
        @RequestMapping(params = "importExcel", method = RequestMethod.POST)
        @ResponseBody
        public AjaxJson importExcel(HttpServletRequest request, HttpServletResponse response) {
                AjaxJson j = new AjaxJson();
               
                MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request;
                Map<String, MultipartFile> fileMap = multipartRequest.getFileMap();
                for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) {
                        MultipartFile file = entity.getValue();// 获取上传文件对象
                        ImportParams params = new ImportParams();
                        params.setTitleRows(2);
                        params.setHeadRows(1);
                        params.setNeedSave(true);
                        try {
                                List<ZyglRjTempEntity> listZyglRjTempEntitys = ExcelImportUtil.importExcel(file.getInputStream(),ZyglRjTempEntity.class,params);
                                //1.清空临时表
                                zyglRjTempService.clearData();
                                //写入临时表
                                zyglRjTempService.batchSave(listZyglRjTempEntitys);

                                j.setMsg("文件导入临时表成功!");
                        } catch (Exception e) {
                                j.setMsg("文件导入临时表失败!");
                                logger.error(ExceptionUtil.getExceptionMessage(e));
                        }finally{
                                try {
                                        file.getInputStream().close();
                                } catch (IOException e) {
                                        e.printStackTrace();
                                }
                        }
                }
                return j;
        }
发表于 2017-9-19 17:35:23 | 显示全部楼层
本地还是服务器?内存参数设置了吗
 楼主| 发表于 2017-9-19 17:38:31 | 显示全部楼层
在服务器上,内存参数设置了:
set JAVA_OPTS=-Xms1024m -Xmx4096m -XXermSize=128m -XX:MaxPermSize=512m

有时候本地开发的时候,偶尔也会遇到这种问题,当时 没太注意。
 楼主| 发表于 2017-9-19 17:39:44 | 显示全部楼层
admin 发表于 2017-9-19 17:35
本地还是服务器?内存参数设置了吗


在服务器上,内存参数设置了:
set JAVA_OPTS=-Xms1024m -Xmx4096m -XXermSize=128m -XX:MaxPermSize=512m

有时候本地开发的时候,偶尔也会遇到这种问题,当时 没太注意。
 楼主| 发表于 2017-9-19 17:46:07 | 显示全部楼层
wuliang 发表于 2017-9-19 17:39
在服务器上,内存参数设置了:
set JAVA_OPTS=-Xms1024m -Xmx4096m -XXermSize=128m -XX:MaxPermSize=51 ...

用的版本是 3.7 版本
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表