为什么Java应用程序在Linux上运行速度慢

我们有两台安装了Apache Tomcat的Linux服务器。 一个是运行数据库,另一个是运行Java应用程序。 超过100个用户连接到服务器。 服务器机器是具有4GB内存的四核普通PC。 它在过去6个月里运行正常,但是最近应用程序开始运行缓慢。 突然,Java应用程序被卡住,用户无法工作一段时间。 没有networking问题。 我试图找出原因,无论是机器问题还是Java应用程序中的问题。 任何机构可以帮助我吗?

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

我会查看服务器上可用的资源什么时候发生,内存或CPU使用率是否上升,数据库是否跟不上请求等。

您的应用程序是否变得更受欢迎,被更多的用户使用,并发使用,发生问题时连接了多less用户? 用户是否更频繁地使用该应用程序,或者可能整天连接它们。

其次,它可能是与Java相关的,你最近更新了JVM,并且导致了一个问题或者与应用程序发生冲突,导致它慢下来?

我会说:

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

事情不会奇迹般地改变。 你们介绍给我们的图片必须有一个缺失。

应用程序是multithreading的,并且用户负载有所增加吗? 有时候,在应用程序中引入死锁,直到进入正确的负载情况才会出现,因此它们可能是真正的诊断问题。 应用程序在生产中有多久了? 在那个时候,特定的格式不正确的查询可能将系统绑定起来,那么数据库的大小是否已经有了显着的增加?

2针对java进程运行虚拟机并监视内存使用情况。 (如果你不能运行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