websphere服务器内存修改,WebSphere应用程序服务器线程池中的潜在本机内存使用问题...

Problem

WebSphere应用程序服务器线程池可能会在线程销毁时泄露ThreadLocal对象(java.lang.ThreadLocal)。ThreadLocal对象可以占有一个很大的本机内存组件,所以如果存在ThreadLocal对象泄露,您有可能会遇到本机内存泄露问题。

Symptom

应用服务器进程占用的内存会显著增大。您还有可能遇到以下症状:

抛出内存溢出错误(OutOfMemoryError)

在SystemOut.log文件里看见Malloc错误:

JVMDBG001: malloc failed to allocate (malloc分配失败)

创建线程的错误:

“Failed to fork OS thread” (无法分开操作系统线程)

或者

“cannot create anymore threads” (创建线程的错误”无法创建更多线程)

Cause

WebSphere应用程序服务器线程池可能会在线程销毁时泄露ThreadLocal对象。ThreadLocal对象是Java堆对象,但它们拥有一个本机内存组件不会被立即释放,直到ThreadLocal对象被垃圾回收。由于不是每次销毁线程时都垃圾回收它们的ThreadLocal对象,最终会导致本机组件泄露。

Environment

WebSphere应用程序服务器 6.0.2,6.1,及7.0

Diagnosing The Problem

检查javacore文件里线程号比较大的Web容器线程,或者默认的线程池线程,任何线程号超过300的线程都有可能是潜在的泄露线程。如:

"WebContainer : 1003" (TID:0x37D62000

"Default : 338" (TID:109934D0

"TCPChannel.DCS : 303" (TID:0x4D720000

线程名称后面的数字就是线程号,也是线程池创建的线程的数量。

所以,以上例子说明线程池创建了1004个Web容器线程(线程号从0开始)。这并不表示线程池里仍有这么多活跃的线程,因为大它们大部分已经被销毁。线程号不会被重用。

Resolving The Problem

使用固定大小的线程池,会防止线程池收缩,这样会防止线程被销毁。如果没有线程被销毁,就没有遗留的ThreadLocal对象,就不会发生本机内存泄露。

要设置固定大小线程池,请设置相等的线程池最大线程数和最小线程数。这样只要线程池创建的线程数达到最大值,线程池就不会收缩了。线程池最大线程数是线程的阈值,请保持原来的最大线程数。改变最大线程数会对应用程序的性能产生影响。

哪个线程池发生线程泄漏问题,您就需要在管理控制台上改变那个线程池的大小。最常用的两个线程池是Web容器线程池和默认线程池,它们各自的操作指南请参考以下。TCP通道DCS线程池也是一个可能发生线程泄漏的线程池,但它不是常用的线程池。

IBM技术支持会建议您哪个线程池需要设置固定大小。如果您不确定哪一个线程池需要设置,您最好把默认线程池和Web容器两个线程池都设成固定大小。

Web容器线程池:

1. 在管理控制台上,点击服务器 > 应用程序服务器 > 服务器名称。

2. 在页面底部,展开其他属性,点击线程池。

3. 点击“WebContainer”。

4. 更改“最小大小”输入框里的值与“最大大小”相同,如50。

5. 确保“允许线程分配超过最大线程大小”单选框不被选中。

6. 点击“确定”按钮,保存到主配置。

需要重启应用程序服务器使更改生效。

默认线程池

1. 在管理控制台上,点击服务器 > 应用程序服务器 > 服务器名称。

2. 在页面底部,展开其他属性,点击线程池。

3. 点击“Default”。

4. 更改“最小大小”输入框里的值与“最大大小”相同,如50。

5. 确保“允许线程分配超过最大线程大小”单选框不被选中。

6. 点击“确定”按钮,保存到主配置。

需要重启应用程序服务器使更改生效。

Related Information

[{"Business Unit":{"code":"BU053","label":"Cloud & Data Platform"},"Product":{"code":"SSEQTP","label":"WebSphere Application Server"},"Component":"Out of Memory","Platform":[{"code":"PF002","label":"AIX"},{"code":"PF010","label":"HP-UX"},{"code":"PF016","label":"Linux"},{"code":"PF027","label":"Solaris"},{"code":"PF033","label":"Windows"}],"Version":"All Versions","Edition":"","Line of Business":{"code":"LOB36","label":"IBM Automation"}}]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值