我有一个分类广告网站。
我使用 PHP、MySql 和 SOLR。
Solr 使用 Servlet 容器,在我的情况下是 JETTY,它是 Java 应用程序。
我刚刚注意到我的网站出了大问题。我打开终端并输入“top”命令,发现 JAVA 正在消耗所有的 CPU 和内存。
现在我想“好吧,也许我需要更多的内存和 CPU”,所以我增加了它。但随着它的增加,Java 应用程序开始消耗更多资源。
这种情况以前从未发生过,这要么是一个错误,要么是某种黑客行为。
无论如何,我现在需要解决这个问题,所以我想知道我该怎么做?
我能否从某些错误日志中准确找出内存使用量何时开始上升?
如何解决此问题?
我该如何预防?如果请求在时间范围内,是否可以以某种方式预防过多的请求?
谢谢
答案1
你使用了多少 RAM?SOLR 有一个已知问题,处理字段缓存这会导致它在进行排序搜索时占用大量内存。
编辑:
好的,尝试使用pmap-d在您的三大进程(httpd/php、MySQL、Jetty)上,看看是否有一些子库占用了您的所有内存。
答案2
你的 java 进程总是会消耗 -Xmx 值那么多的内存。当它达到这个值时,它就会开始回收内存。
如果您希望降低内存使用量并且您的应用程序运行良好,那么您只需要调低 JVM Xmx 参数。
我曾经遇到过一个 Java 程序调用的 C 库中发生内存泄漏的情况,导致进程内存使用量不断增长,而 Java 堆却保持稳定。但这种情况不太可能发生。
有很多工具查看您的 java 堆,但您应该首先记录一些 java.lang.Runtime.totalMemory ...
答案3
我相信您的服务器可能存在病毒或间谍攻击。使用一些最好的防病毒和间谍软件扫描您的服务器。