wuliang 发表于 2017-9-19 17:22:33

导入文件内存溢出

之前 应用一直稳定 运行,最近开通数据文件导入功能,发现经常系统无响应,通过 日志显示 内存溢出了。

也调整过内存值 ,但仍然存在这个问题,请大侠帮忙看下,以下是日志:
SEVERE: Servlet.service() for servlet in context with path threw exception 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 in context with path threw exception 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)

wuliang 发表于 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;
        }

admin 发表于 2017-9-19 17:35:23

本地还是服务器?内存参数设置了吗

wuliang 发表于 2017-9-19 17:38:31

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

有时候本地开发的时候,偶尔也会遇到这种问题,当时 没太注意。

wuliang 发表于 2017-9-19 17:39:44

admin 发表于 2017-9-19 17:35 static/image/common/back.gif
本地还是服务器?内存参数设置了吗


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

有时候本地开发的时候,偶尔也会遇到这种问题,当时 没太注意。

wuliang 发表于 2017-9-19 17:46:07

wuliang 发表于 2017-9-19 17:39 static/image/common/back.gif
在服务器上,内存参数设置了:
set JAVA_OPTS=-Xms1024m -Xmx4096m -XXermSize=128m -XX:MaxPermSize=51 ...

用的版本是 3.7 版本
页: [1]
查看完整版本: 导入文件内存溢出