没有提供足够的细节。需要更多信息:(
使用htop
或top
查找每个进程和每个线程的内存和 CPU 使用情况。
中央处理器
在 4 核系统中恒定 25% 的 CPU 使用率表明单核应用程序/线程在它能够使用的唯一核上运行 100% CPU。
哪个应用程序正在吃 CPU?
记忆
20% 的内存约为 1.6GB。对于仅运行 tomcat + mysql 的空闲服务器,这比我预期的要多一点。告诉 tomcat预-Xms1024
分配 1GB 内存以便解释它。
将 tomcat 设置更改为-Xms512
和-Xmx2048
。当你把一些用户扔给它时,观察 tomcat 的内存使用情况。如果它继续增长直到达到 2GB……然后冻结,这可能表明内存泄漏。
磁盘
用于df -h
检查磁盘使用情况。完整的分区可能会导致您遇到的问题。
Filesystem Size Used Avail Usage% Mounted on
/cygdrive/c 149G 149G 414M 100% /
(如果您刚刚在此示例中发现我的笔记本电脑空间不足。您做得对:D)
日志
日志很棒。然而,他们有一个坏习惯来填满磁盘。检查日志磁盘使用情况。新用户连接时是否正确写入/擦除/旋转日志?删除日志可以解决问题吗?(在删除它们之前将它们复制到某处以供将来分析)
如果不。日志仍然很棒。他们有帮助您跟踪错误的好习惯。检查tomcat日志。您可能希望将日志记录级别设置为调试。网站死后最后会发生什么?任何有用的错误信息?用户连接是否仍被 tomcat 接收和接受?
应用
我想 25% 的 CPU 用于 tomcat(而不是 mysql)。Tomcat 本身不会失败。在其上运行的应用程序必须失败。尝试从 tomcat 中删除应用程序(您最终可以使用 hello world 代替)。没有您的应用程序,tomcat 可以保持通宵工作吗?它可能可以,在这种情况下,故障出在应用程序上。
在您的应用程序中启用完整的调试日志记录并尝试跟踪问题。在调试模式下直接从 Eclipse 运行它,然后将用户扔给它。它是否以同样的方式持续失败?
如果是,请在 Eclipse 调试器中点击“暂停”并检查应用程序正在做什么。查看每个线程当前正在运行的代码段 + 它的调用堆栈。重复几次。如果出现死锁、无限循环或类似情况,您可以通过这种方式找到它。
如果你幸运的话,你现在已经发现了这个问题。如果不是,那么你很不幸,这是一个可能在应用程序内部很深的棘手错误。这可能很难追踪。决心将导致成功。祝你好运=)