我有一个 tomcat 6.0.20,apr 1.2,jdk 1.6.0_15,mysql 5.1.38 在 4 GB ram 的 rhel 盒子上运行。上面有一个简单的 jsp/servlet 应用程序,有 5 个用户,一个 struts 1.2.0.9 有 64 个用户,一个 struts 2.0 应用程序有 35 个用户。struts 2.0 用户每秒输入一个条目,一天大约有 900 个条目。我还在最后两个应用程序中使用 toplink 进行持久性。我已在代码中将所有非引用对象声明为 null,并为来自 struts 2 站点和 tomcat 站点的配置文件应用了生产值。在mysql中应用线程缓存,将wait_timeout和interactive_timeout减少到相当于tomcat的会话超时。增加了linux中的文件描述符。重做查询。检查线程转储,查看 gc 统计信息,在此基础上应用上述更改,
YET 仍然面临“java.lang.OutOfMemoryError”错误。
在不同的时间它用于不同的事物,有时它的 Servlet.service(),有时它的 image.servlet,有时它导致它的 jasper。
非常令人沮丧,因为错误不是恒定的,而是随着时间的推移不断变化
任何帮助,将不胜感激!!!
JAVA_OPTS=-server -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled -XX:+CMSParallelRemarkEnabled (tomcat manager 报告 34 mb empty 所以没有使用 permsize, mx 和 mn 等)
持久性.xml
<property name="toplink.jdbc.url" value="jdbc:mysql://localhost:3306/dbname?autoReconnect=false"/>
服务器.xml
<Connector port="80" protocol="HTTP/1.1" connectionTimeout="2000" redirectPort="8443" compression="on" compressableMimeType="application/octet-stream,text/html,text/xml,text/plain,application/x-javascript,image/gif,text/css,image/gif,application/vnd.ms-excel,application/pdf" enableLookups="false"/>
上下文.xml
<Context reloadable="false" delegate="false" privileged="false">