集群生产服务器中的性能问题
Performance issue in clustered Production Servers
我们的生产用户每月至少抱怨性能问题两到三次。我们在生产环境中使用了 IBM WAS 8 服务器。该应用程序使用两个基于 SOAP 的服务,即 H 和 T。H 部署在 INTERNET 集群服务器(X,Y)上。 T部署在内网服务器(U、V)上。 Client直接连接到H。H连接到INTRANET上的T。基于 SOAP 的服务 H,T 都连接到数据库。此外,还有一项用于验证用户的服务。我们在服务器 U 和 V 的日志中没有看到任何错误。但是服务器 X、Y 上 H 的日志给出了以下错误。不同时间的不同错误:
1. java.net.SocketTimeoutException: Socket operation timed out before it could be completed
2. java.io.IOException: Connection close: Read failed. Possible end of stream encountered.
java.lang.OutOfMemoryError: GC overhead limit exceeded
3. Exception - User fault processing is not supported. The @WebFault faultbean is missing for java.rmi.RemoteException
4. Authentication failed
我们正在考虑增加堆大小。但是,在这样做之前,我们应该从服务器收集哪些性能参数以缩小问题的根本原因
作为第一步,您应该始终监控底层系统(硬件服务器、VM、容器)关键性能资源 - CPU 利用率、可用内存、网络使用情况等。如果您的机器是 运行 超出 CPU 个周期或空闲 RAM,应用服务器性能将受到影响。
作为下一层,Java 和 WAS 提供了各种性能指标,可以帮助诊断像您这样的问题。 WebSphere Application Server 是 WAS 性能调查的有用指南
性能食谱 https://publib.boulder.ibm.com/httpserv/cookbook/
在您的情况下,这部分可能最适用:https://publib.boulder.ibm.com/httpserv/cookbook/Recipes-WAS_Traditional_Recipes-General_WAS_Traditional_Performance_Problem.html
您列表中的错误之一是由于 "GC overhead limit exceeded" 引发的 OOM。这意味着服务器 JVM 运行 在 java 堆中的可用 space 严重不足,因此它几乎所有时间都在 运行 Java 垃圾收集上试图释放 space 去做真正的工作。此类问题可能会导致您列出的其他问题,例如超时和通信失败。
要诊断过多的 GC 问题,您需要详细的 GC 日志记录 - 启用详细的 GC 是上面第二个 link 中的第 2 步,也在 http://www-01.ibm.com/support/docview.wss?uid=swg21114927 详细的 GC 日志记录开销非常低中进行了解释并且具有非常高的诊断价值,因此应该始终启用它,包括在生产环境中。
GC 日志中最关键的信息是每次全局 GC 后有多少可用的空闲堆。这应该至少是总保有堆大小的 30%,否则 JVM 将不得不做太多的 GC 工作来清除 space 您希望服务器执行的 'real work'。 "GC overhead limit exceeded" 错误通常出现在配置中,当繁忙的服务器上可用期限少于 10% space 时。
如果服务器在全局 GC 后一直 运行 的可用期限 space 少于 30%,则您需要增加堆大小或将一些工作负载转移出服务器。
我们的生产用户每月至少抱怨性能问题两到三次。我们在生产环境中使用了 IBM WAS 8 服务器。该应用程序使用两个基于 SOAP 的服务,即 H 和 T。H 部署在 INTERNET 集群服务器(X,Y)上。 T部署在内网服务器(U、V)上。 Client直接连接到H。H连接到INTRANET上的T。基于 SOAP 的服务 H,T 都连接到数据库。此外,还有一项用于验证用户的服务。我们在服务器 U 和 V 的日志中没有看到任何错误。但是服务器 X、Y 上 H 的日志给出了以下错误。不同时间的不同错误:
1. java.net.SocketTimeoutException: Socket operation timed out before it could be completed
2. java.io.IOException: Connection close: Read failed. Possible end of stream encountered.
java.lang.OutOfMemoryError: GC overhead limit exceeded
3. Exception - User fault processing is not supported. The @WebFault faultbean is missing for java.rmi.RemoteException
4. Authentication failed
我们正在考虑增加堆大小。但是,在这样做之前,我们应该从服务器收集哪些性能参数以缩小问题的根本原因
作为第一步,您应该始终监控底层系统(硬件服务器、VM、容器)关键性能资源 - CPU 利用率、可用内存、网络使用情况等。如果您的机器是 运行 超出 CPU 个周期或空闲 RAM,应用服务器性能将受到影响。
作为下一层,Java 和 WAS 提供了各种性能指标,可以帮助诊断像您这样的问题。 WebSphere Application Server 是 WAS 性能调查的有用指南
性能食谱 https://publib.boulder.ibm.com/httpserv/cookbook/
在您的情况下,这部分可能最适用:https://publib.boulder.ibm.com/httpserv/cookbook/Recipes-WAS_Traditional_Recipes-General_WAS_Traditional_Performance_Problem.html
您列表中的错误之一是由于 "GC overhead limit exceeded" 引发的 OOM。这意味着服务器 JVM 运行 在 java 堆中的可用 space 严重不足,因此它几乎所有时间都在 运行 Java 垃圾收集上试图释放 space 去做真正的工作。此类问题可能会导致您列出的其他问题,例如超时和通信失败。
要诊断过多的 GC 问题,您需要详细的 GC 日志记录 - 启用详细的 GC 是上面第二个 link 中的第 2 步,也在 http://www-01.ibm.com/support/docview.wss?uid=swg21114927 详细的 GC 日志记录开销非常低中进行了解释并且具有非常高的诊断价值,因此应该始终启用它,包括在生产环境中。
GC 日志中最关键的信息是每次全局 GC 后有多少可用的空闲堆。这应该至少是总保有堆大小的 30%,否则 JVM 将不得不做太多的 GC 工作来清除 space 您希望服务器执行的 'real work'。 "GC overhead limit exceeded" 错误通常出现在配置中,当繁忙的服务器上可用期限少于 10% space 时。
如果服务器在全局 GC 后一直 运行 的可用期限 space 少于 30%,则您需要增加堆大小或将一些工作负载转移出服务器。