IBM-WAS:如何配置 webphere 以避免 OutOfMemoryError?

IBM-WAS: how to configure webphere to avoid OutOfMemoryError?

我们部署的应用程序在 websphere 服务器上运行缓慢,我们发现 WAS 日志中有很多 OutOfMemoryError 消息。

[11/22/17 2:35:27:945 UTC] 00000116 ServletWrappe E
com.ibm.ws.webcontainer.servlet.ServletWrapper service Uncaught
service() exception thrown by servlet action:
java.lang.OutOfMemoryError: Failed to create a thread: retVal
-1073741830, errno 11
    at java.lang.Thread.startImpl(Native Method)
    at java.lang.Thread.start(Thread.java:948)
    at com.sun.jndi.ldap.Connection.<init>(Connection.java:246)
    at com.sun.jndi.ldap.LdapClient.<init>(LdapClient.java:149)
    at com.sun.jndi.ldap.LdapClient.getInstance(LdapClient.java:1626)
    at com.sun.jndi.ldap.LdapCtx.connect(LdapCtx.java:2758)
    at com.sun.jndi.ldap.LdapCtx.<init>(LdapCtx.java:331)
    at com.sun.jndi.ldap.LdapCtxFactory.getUsingURL(LdapCtxFactory.java:204)

最近,我们更新了应用程序和WAS,但在此之前,我们从未见过这样的问题。我们使用 IBM Content Navigator (ICN) 2.0.3 制作我们的应用程序。作为图像查看器并部署它,并将 Websphere 升级到 WAS 8.5.5.12,所以我们无法定义问题是由 ICN 图像查看器还是新的 WAS 修复包引起的,但似乎 ICN 图像查看器更可能减慢速度系统,因为我们总是用新的修复包升级 WAS,我们还没有看到它们中的任何一个会导致 OutOfMemoryError。

我们在性能缓慢期间检查了服务器空闲 space,我们发现有足够的内存剩余。并且我们也将 websphere 的最大堆大小调整为 4096(这确实很高),但它仍然没有用。目前我们不知道在哪里配置来解决这种低性能问题。请给我们一些建议。

找到相同的http://www-01.ibm.com/support/docview.wss?uid=swg21633466

  1. Linux 有每个用户允许的最大进程数限制,我们可以使用 "ulimit -u" 命令检查它。如果此值较低(默认值为 1024),则将其设置为无限制或将其提高到一个较高的值,例如 131072。此部分还突出显示为 "ulimit -a" 输出中的 "max user processes" 部分。使用以下命令将其设置为无限制: ulimit -u unlimited

  2. 通过使用 -Xmx 选项减小 Java 堆的大小来增加可用的本机内存量。 Java 堆未使用的进程地址 space 可用于本机堆使用。 Java 堆在 $TOP/bin/conf/service_mem_settings.ini 文件中为 6 个服务设置,在 $TOP/bin/conf/env_settings.ini 文件中为后端脚本设置为 custom_java_options。

  3. 使用 'df -k' 命令检查 space 要求。

  4. 减少正在使用的线程数。