`

如何解决查找HostName引起JVM挂起,或者响应慢的问题?

阅读更多

由于项目中出现用java的getHostName很慢的问题,而且在多线程中也有问题

 

一种解决方式是不用getHostName,用IP来代替

 

另一种解决方式是在网上搜到的,如下

 

转自:http://tech.watchstor.com/backup-and-archiving-113031.htm

 

  • 摘要:在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挂起或响应慢。
  • 标签:虚拟机  JVM  Java

 

环境

产品: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。

具体请参考以下文档:http://www-1.ibm.com/support/docview.wss?uid=swg21170467

 

 

另注意:

 

现在才知道是IP地址的问题,在FC4中默认的是IPv6 socket,JDK1.4支持的应该是IPv4,具体原因可以查看SUN公司给出的解释.
解决办法是在运行JAVA程序时加上 -Djava.net.preferIPv4Stack=true 如:

java -Djava.net.preferIPv4Stack=true application.

详悉信息请查看下面的连接,如果那位朋友有更好的解决办法盼告知.

http://java.sun.com/j2se/1.4.2/docs/...roperties.html

发现禁用IPV6,是比较好的解决方法.

--------------------------------------------------------------------------------


修改 /etc/modprobe.conf 文件,增加

alias net-pf-10 off
alias ipv6 off

这样就不用增加参数 "-Djava.net.preferIPv4Stack=true ",重起即可.

 

---------------------------------------------

补充:

在 Java 应用中JVM 也会缓存DNS 的解析结果,这个缓存是在InetAddress 类中完成
的,而且这个缓存时间还比较特殊,它有两种缓存策略:一种是正确解析结果缓存,另一
种是失败的解析结果缓存。这两个缓存时间由两个配置项控制,配置项是在%JAVA_
HOME%\lib\security\java.security 文件中配置的。两个配置项分别是networkaddress.cache. ttl
和networkaddress.cache.negative.ttl,它们的默认值分别是-1(永不失效)和10(缓存10 秒)。
要修改这两个值同样有几种方式,分别是:直接修改java.security 文件中的默认值、
在Java 的启动参数中增加-Dsun.net.inetaddr.ttl=xxx 来修改默认值、通过InetAddress 类动
态修改。
在这里还要特别强调一下,如果我们需要用InetAddress 类解析域名时,一定要是单
例模式,不然会有严重的性能问题,如果每次都创建InetAddress 实例,每次都要进行一
次完整的域名解析,非常耗时,这点要特别注意。

分享到:
评论

相关推荐

    JVM问题诊断常用命令

    ### JVM问题诊断常用命令详解 在Java开发与运维过程中,针对JVM(Java虚拟机)进行性能调优、故障排查是非常重要的环节。本文将详细介绍三种常用的JVM问题诊断工具:`jinfo`、`jmap` 和 `jstack` 的功能、用法以及...

    解决linux找不到hostname的处理

    ### 解决Linux服务错误UnknownHostException的方法 在Linux环境中运行服务时,可能会遇到“UnknownHostException”的异常情况,这通常发生在尝试访问或设置主机名时出现问题。本文将详细介绍如何诊断并解决这一问题...

    hadoop常见问题及解决方法

    解决方法:查找被占用的端口号对应的PID,使用netstat –tunl命令,kill掉对应的进程,或者使用killall -9 java命令强制关闭java进程。 3、safeMode报错: 解决方法:NameNode启动时,首先进入安全模式,如果...

    JVM调优工具命令详解.pdf

    在现代的软件开发与运行环境中,Java虚拟机(JVM)的性能调优是非常重要的一环,特别是在处理大型应用程序或者服务时,合适的JVM调优能够显著提升系统性能和稳定性。本篇文档详细介绍了JVM调优工具的命令使用及其...

    TongWeb启动慢.doc

    在实际运维中,TongWeb启动慢可能由多种因素引起,包括但不限于JVM配置不当、系统资源不足、应用程序初始化过程复杂等。因此,除了上述解决方案,还需要结合具体情况进行排查,如检查JVM内存设置、优化应用启动脚本...

    Linux中hostname修改方法详解

    Linux操作系统的hostname是一个kernel变量,可以使用如下两种方式查看 # hostname 和 # cat /proc/sys/kernel/hostname 临时修改hostname 通过hostname命令可以设置系统的hostname # hostname newname new...

    idea使用jvm2222222222222222222

    在实际开发中,了解这些JVM相关的知识可以帮助我们更好地进行性能调优,例如通过分析字节码来理解方法的执行流程,利用类加载器实现自定义加载策略,或者通过jstatd监控JVM的运行状态,及时发现并解决问题。...

    JAVA JVM性能调优监控工具详解

    这些问题如果不能及时有效地解决,不仅会影响系统的稳定性与响应速度,还可能导致服务中断。因此,掌握一些常用的JVM性能调优和监控工具对于Java开发者来说至关重要。本文将详细介绍几种常见的JVM性能调优工具,并...

    hostname命令 显示和设置系统的主机名

    hostname命令用于显示和设置系统的主机名称。环境变量HOSTNAME也保存了当前的主机名。 在使用hostname命令设置主机名后,系统并不会永久保存新的主机名,重新启动机器之后还是原来的主机名。如果需要永久修改主机名...

    JVM调优工具11.pdf

    JVM(Java虚拟机)是Java程序运行的基础环境,其性能直接关系到Java应用程序的稳定性和响应速度。JVM调优是确保Java应用程序高效运行的重要手段。在本文件中,提到了JVM调优过程中使用的多种工具,接下来将详细说明...

    websphere安装配置(jvm,数据源还有集群)

    ### WebSphere 安装配置详解:JVM、数据源及集群 #### 一、WebSphere简介及安装 IBM WebSphere Application Server(WAS)是一款功能强大的企业级应用服务器,广泛应用于构建、部署和管理Java EE应用程序。为了确保...

    SAP GUI740 安装经验分享及登陆报错NiHLGetNodeAddr解决方案

    ### SAP GUI740安装经验分享 随着信息技术的不断进步,企业级软件系统也在持续更新迭代,以适应更高效的工作流程需求...此外,针对具体问题,用户还可以查阅官方文档或寻求专业技术人员的帮助,以便更高效地解决问题。

    解决Idea启动Spring Boot很慢的问题

    "解决Idea启动Spring Boot很慢的问题" 解决Idea启动Spring Boot很慢的问题是一种常见的问题,许多开发者在使用Idea启动Spring Boot项目时,遇到了启动时间过长的问题。这种问题可能会导致开发效率下降,影响项目的...

    JAVA-JVM参数讲解

    ### JAVA-JVM参数详解 #### 一、JPS:查看正在运行的 Java 进程 - **概述**:`jps`(Java Process Status Tool)是JDK自带的一个实用工具,用于显示当前计算机上所有正在运行的Java应用程序的进程ID(PID)及其...

    backports.ssl_match_hostname-3.4.0.2

    为了解决这个问题,Python社区推出了`backports.ssl_match_hostname`库,这是一个用于后向兼容的模块,提供了与Python 3.4及更高版本相同的功能,以确保主机名与SSL证书匹配。本文将深入探讨这个模块以及它在Tornado...

    网络ip扫描工具,根据hostname也可以

    网络ip扫描工具,根据hostname也可以

    gethostname

    总的来说,"gethostname"是网络通信中的基础工具,它帮助我们管理和识别网络上的设备,并且在诊断网络问题、进行安全审计以及构建网络应用时都起着关键作用。理解并熟练掌握如何使用和查找主机名,对于任何IT专业...

    Zabbix常见问题解决方案.docx

    Zabbix 常见问题解决方案 Zabbix 是一款功能强大且灵活的监控工具,但是在实际使用中,总会遇到一些问题。下面我们将对 Zabbix 常见问题进行解决,并对解决方案进行详细的解释。 问题一:查看 zabbix_server.log,...

    springcloud注册hostname或者ip的那些事

    Spring Cloud 是一套微服务解决方案,它基于 Spring Boot 的便利性,为构建分布式系统提供了一系列的工具,包括服务发现、负载均衡、服务网关、断路器、配置中心等。Spring Cloud 的目标是简化微服务架构中的复杂性...

    ArcGisServer 跨网段访问问题及解决

    ArcGisServer 跨网段访问问题及解决 在 ArcGisServer 中,跨网段访问问题是一个常见的问题,该问题的解决方案对许多开发者和管理员来说都是非常重要的。今天,我们将详细讨论 ArcGisServer 跨网段访问问题及解决...

Global site tag (gtag.js) - Google Analytics