{"id":1858,"date":"2022-08-30T15:20:02","date_gmt":"2022-08-30T15:20:02","guid":{"rendered":"https:\/\/unknownerror.org\/index.php\/2013\/12\/02\/reading-xlsx-throws-outofmemoryerror-permgen-collection-of-common-programming-errors\/"},"modified":"2022-08-30T15:20:02","modified_gmt":"2022-08-30T15:20:02","slug":"reading-xlsx-throws-outofmemoryerror-permgen-collection-of-common-programming-errors","status":"publish","type":"post","link":"https:\/\/unknownerror.org\/index.php\/2022\/08\/30\/reading-xlsx-throws-outofmemoryerror-permgen-collection-of-common-programming-errors\/","title":{"rendered":"Reading XLSX throws OutOfMemoryError PermGen-Collection of common programming errors"},"content":{"rendered":"<p>At the start of my <code>readXlsx<\/code> method this line <strong>throws<\/strong> a <code>PermGen Error<\/code>:<\/p>\n<pre><code>XSSFWorkbook wb = new XSSFWorkbook(OPCPackage.open(is));\n<\/code><\/pre>\n<p>where <code>is<\/code> is an <code>InputStream<\/code> for an Excel file sent over HTTP Post.<\/p>\n<p>Trying to upload a few times with this error caused tomcat to crash. The file sent wasn&#8217;t bigger then <strong>0,05 MB<\/strong> either.<\/p>\n<p>Any idea what can cause this?<\/p>\n<p>I see that I never close the <code>InputStream<\/code>, can this cause this?<\/p>\n<p>Edit: It&#8217;s actually an POIXMLException at the line that declares XSSFWorkbook, caused by PermGen Error<\/p>\n<pre><code>StackTrace: org.apache.poi.POIXMLException: java.lang.reflect.InvocationTargetException \nat org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:62) \nat org.apache.poi.POIXMLDocumentPart.read(POIXMLDocumentPart.java:403) \nat org.apache.poi.POIXMLDocument.load(POIXMLDocument.java:155) \nat org.apache.poi.xssf.usermodel.XSSFWorkbook.(XSSFWorkbook.java:186) \nat classes.XLSXReader.readXLSX(XLSXReader.java:23) \nat trainweb.ParticipantUploader.uploadCourseParticipants(ParticipantUploader.java:204) \nat trainweb.ParticipantUploader.doPost(ParticipantUploader.java:139) \nat javax.servlet.http.HttpServlet.service(HttpServlet.java:637) \nat javax.servlet.http.HttpServlet.service(HttpServlet.java:717) \nat org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) \nat org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) \nat org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) \nat org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) \nat org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) \nat org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) \nat org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) \nat org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) \nat org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190) \nat org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291) \nat org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:769) \nat org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:698) \nat org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:891) \nat org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690) \nat java.lang.Thread.run(Thread.java:619) \nCaused by: java.lang.reflect.InvocationTargetException \nat sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) \nat sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) \nat sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) \nat java.lang.reflect.Constructor.newInstance(Constructor.java:513) \nat org.apache.poi.xssf.usermodel.XSSFFactory.createDocumentPart(XSSFFactory.java:60) \n... 23 more \nCaused by: java.lang.OutOfMemoryError: PermGen space \nat java.lang.String.intern(Native Method) \nat org.apache.xmlbeans.impl.piccolo.util.CharStringConverter.convert(CharStringConverter.java:110) \nat org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.yytext2(PiccoloLexer.java:3319) \nat org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseElementNameNS(PiccoloLexer.java:2360) \nat org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseOpenTagNS(PiccoloLexer.java:1455) \nat org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.parseTagNS(PiccoloLexer.java:1362) \nat org.apache.xmlbeans.impl.piccolo.xml.PiccoloLexer.yylex(PiccoloLexer.java:4678) \nat org.apache.xmlbeans.impl.piccolo.xml.Piccolo.yylex(Piccolo.java:1290) \nat org.apache.xmlbeans.impl.piccolo.xml.Piccolo.yyparse(Piccolo.java:1400) \nat org.apache.xmlbeans.impl.piccolo.xml.Piccolo.parse(Piccolo.java:714) \nat org.apache.xmlbeans.impl.store.Locale$SaxLoader.load(Locale.java:3439) \nat org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1270) \nat org.apache.xmlbeans.impl.store.Locale.parseToXmlObject(Locale.java:1257) \nat org.apache.xmlbeans.impl.schema.SchemaTypeLoaderBase.parse(SchemaTypeLoaderBase.java:345) \nat org.openxmlformats.schemas.drawingml.x2006.main.ThemeDocument$Factory.parse(Unknown Source) \nat org.apache.poi.xssf.model.ThemesTable.(ThemesTable.java:44) \nat sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) \nat sun.reflect.Native\n<\/code><\/pre>\n<ol>\n<li>\n<p>PermGen means that you have exhausted the space for new Java classes in your JVM. Probably you&#8217;re already close to the limit and as soon as you try to use a big library for the first time, it can&#8217;t load all the classes it needs.<\/p>\n<p>You should raise the limit, passing -XX:MaxPermSize=&#8230; to the JVM, for example -XX:MaxPermSize=128m.<\/p>\n<\/li>\n<li>\n<p>When running in a environment like an application server or web server it is likely that the number of classes loaded is too high. Therefore please increase your PermSize when you run in an application server (or web application server like Tomcat).<\/p>\n<p>To do this append <code>-XX:MaxPermSize=...m<\/code> to the java command starting your server. Please read the server documentation how to append additional parameters.<\/p>\n<p>The given parameter can be different if the used JRE is not the one from Oracle.<\/p>\n<\/li>\n<\/ol>\n<p id=\"rop\"><small>Originally posted 2013-12-02 21:01:53. <\/small><\/p>","protected":false},"excerpt":{"rendered":"<p>At the start of my readXlsx method this line throws a PermGen Error: XSSFWorkbook wb = new XSSFWorkbook(OPCPackage.open(is)); where is is an InputStream for an Excel file sent over HTTP Post. Trying to upload a few times with this error caused tomcat to crash. The file sent wasn&#8217;t bigger then 0,05 MB either. Any idea [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-1858","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/posts\/1858","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/comments?post=1858"}],"version-history":[{"count":0,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/posts\/1858\/revisions"}],"wp:attachment":[{"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/media?parent=1858"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/categories?post=1858"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/unknownerror.org\/index.php\/wp-json\/wp\/v2\/tags?post=1858"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}