为什么 Java 应用程序在 Linux 上的客户端运行缓慢

为什么 Java 应用程序在 Linux 上的客户端运行缓慢

我们有两台安装了 Apache Tomcat 的 Linux 服务器。一台运行数据库,另一台运行 Java 应用程序。有 100 多个用户连接到服务器。服务器机器是四核普通 PC,有 4 GB 内存。过去 6 个月运行正常,但应用程序最近开始运行缓慢。突然间,Java 应用程序卡住了,用户一段时间无法工作。没有网络问题。我正在尝试找出原因,是机器问题还是 Java 应用程序问题。有人能帮我解决这个问题吗?

答案1

首先要确定这是资源问题,还是应用程序本身的问题。

当发生速度变慢时,我会查看服务器上可用的资源,RAM 或 CPU 使用率是否出现峰值,数据库是否难以满足请求速度等等。

您的应用程序是否比以前更受欢迎,同时使用的用户也更多了?发生问题时有多少用户处于在线状态?用户是否更频繁地使用该应用程序,或者是否可能整天保持在线状态。

其次,这可能与 Java 有关,您最近是否更新了 JVM,这是否导致了应用程序出现问题或发生冲突,从而减慢了其速度?

答案2

我实际上想说:

  1. 您最近做过任何操作系统更新吗?
  2. Java 应用程序中的代码是否发生了变化?
  3. 使用模式是否发生了变化?(在用户端?)
  4. 谁在抱怨应用程序很慢?(本地和远程用户,仅本地,还是仅远程?)

事情不会奇迹般地改变。你向我们展示的画面中一定缺少了某部分。

答案3

应用程序是否是多线程的,用户负载是否有所增加?有时,应用程序中的线程死锁直到您进入正确的负载情况才会出现,因此诊断起来非常困难。应用程序投入生产多长时间了?在此期间,数据库大小是否显著增加,导致特定的格式错误的查询可能使系统陷入停滞?

答案4

2针对 java 进程运行虚拟 VM 并监视内存使用情况。(如果无法运行 VirtualVM,则运行 jconsole.exe。

您可以设置一些 JAVA 选项来帮助您完成此任务:

set JAVA_OPTS=%JAVA_OPTS% -Xloggc:logs\gc.log -XX:+PrintGCDetails
set JAVA_OPTS=%JAVA_OPTS% -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.port=8002 -Dcom.sun.management.jmxremote.authenticate=false
set JAVA_MEM=-Xmx1236m

相关内容