Chinaunix首页 | 论坛 | 博客
  • 博客访问: 11285853
  • 博文数量: 8065
  • 博客积分: 10002
  • 博客等级: 中将
  • 技术积分: 96708
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-16 17:06
文章分类

全部博文(8065)

文章存档

2008年(8065)

分类: 服务器与存储

2008-05-18 12:58:22

环境

产品:WebSphere Application Server
平台:AIX
版本:5.1,6.0


 
问题

    当发现WAS挂起或响应慢的时候,通过 kill -3 产生 javacore 文件,在 javacore 文件中发现大部分的线程堆栈都在执行java.net.InetAddress.getLocalHost,如下:
at java.net.Inet6AddressImpl.getLocalHostName(Native Method)
at java.net.InetAddress.getLocalHost(InetAddress.java:1186)
at org.apache.soap.util.mime.MimeUtils.getUniqueValue(Unknown Source)
at org.apache.soap.rpc.SOAPContext.setRootPart(Unknown Source)
...............................................
 
解答


    在Java 2 SDK 1.4中,JVM 在获得 HostName 的时候会同时进行 IPv4 和 IPv6 查询。如果Domain Name System (DNS) 服务没有配置接受IPv6查询,JVM可能返回Unknown Host异常,如果Domain Name System (DNS) 服务没有正确配置接受IPv6查询,JVM需要等待IPv6查询返回结果,直到超时。这就引起了JVM挂起或响应慢。
    这个问题有以下解决方案:
1.Java解决方案
如果是一般的Java应用程序,可以在启动JVM的时候加入
-Djava.net.preferIPv4Stack=true
参数。
如果是WebSphere Application server,执行如下步骤:
a.登录管理控制台,打开“服务器 > 应用服务器 > 服务名称 > 进程定义 > JVM虚拟机 > 定制属性” 页面。
b.在页面中添加如下定制属性
名称: java.net.preferIPv4Stack
值: true
c.点击“确定”,并保存配置。
d.重新启动应用服务器
2.AIX解决方案
a.安装以下APAR:
AIX V520: IY47908
AIX V510: IY48783
要确认这个补丁是否已经安装,可以用如下命令:
instfix -ik IY#####
b.在确认以上APAR已经安装后,编辑/etc/netsvc.conf文件,在其中加入:
hosts=bind4,local
或者在启动WebSphere Application Server前,设置系统环境变量:
export NSORDER=bind4,local
3.Domain Name System(DNS)解决方案
配置DNS服务器忽略IPv6查询请求
4.Network Information Service (NIS) 解决方案
如果系统使用NIS来解析Hostname,可以通过修改/etc/hosts和/etc/netsvc.conf文件来移除NIS。

具体请参考以下文档:

 

阅读(962) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~