我试图使用Java Servlet,但我最终使用了所有系统内存,并且tomcat被内核杀死,并出现以下错误:
2018-06-18T17:55:49.238505+00:00 myserver kernel: Out of
memory: Kill process 26117 (java) score 247 or sacrifice child
2018-06-18T17:55:49.238937+00:00 myserver kernel: Killed
process 26117 (java) total-vm:6298824kB, anon-rss:710520kB, file-rss:0kB,
shmem-rss:0kB
2018-06-18T17:55:49.241307+00:00 myserver systemd:
tomcat.service: main process exited, code=killed, status=9/KILL
有时我必须为最终用户提供的文件很大(~200 MB)。如果我要求它们中的多个,或者有时只有一个我得到上述崩溃。
case "xml":
response.addHeader("Content-Disposition","attachment;filename=\"igrfgridData.xml\"");
response.setContentType("text/xml");
String line = "";
while ((line = cResponse.readLine()) != null) {
if(!line.startsWith("comment") && !line.isEmpty())
printWriter.print(line.toLowerCase() +"\n");
}
cResponse.close();
break;
cResponse是来自其他服务器的缓冲读卡器。我不确定为什么这应该使用很多内存。这些行只有10个字符长。
皱纹:free -m给出:
total used free shared buff/cache available
Mem: 925 416 73 3 435 323
Swap: 4095 174 3921
Tomcat正在运行这些内存参数: -Xmx4096M -Xms4096M -XX:MaxPermSize = 1024M -XX:PermSize = 1024M
我是否在分配了太多内存的情况下运行tomcat?
答案 0 :(得分:1)
我运行的tomcat分配了太多的内存吗?
是。您的free
命令说您的系统具有全部1G的内存,并且您想以5G运行Tomcat。 4G交换没有帮助,您只需要显着增加RAM。完成后,如果只需要将一些文件从一个缓冲区发送到另一个缓冲区,则可以将Xmx和MaxPermSize都减少50%。