li
  当前位置:主页 > 基础知识 > 文章内容
li
java defunct产生的原因和解决办法
来源: www.ixdba.net  作者: IXDBA.NET官方    时间:2007-09-12   阅读:11  

最近在给客户调试网站的时候,发现了一个java异常进程java defunct,无论怎么killall还是无法关掉这个进程,没有办法只有重启系统。查找资料,解释如下:

   在很多时候,我们启动JAVA进程后,如果退出这个JAVA进程,在系统进程中仍然可以看到这个进程.这种情况一般出现在UNIX/LINUX系统,对于WIN平台出现情况较少.

IXDBA.NET技术社区

 

这个进程在UNIX平台上,你即使kill进程号也不能杀掉它,但它仍然占用系统资源,成了真正的"僵尸"

 

产生的原因:

 

以前我们下载JDK时,可以下载到JDKSRC然后自己编译,现在的官方网站上已经找不到可以自己编译的JDK包,下载回来的JDK都是释放包,我们可以想象,无论SUN在发布JDK时考虑得如何完美,本地库都不可能完全和当前系统的版本号完全一致。举个例子,假如System.gc()调用了本地库glic6.0.2.so

那么在当前系统上没有这个版本的库或没有这个版本的库的链结,那么gc()方法肯定不能正确工作。

 

当然sun在发布的时候可能会把这个本地库打包在JDK发行包中,但glic6.0.2.so中又调用了其它库,如subglic6.0.21.so,即使系统中存在完全相同的glic6.0.2.so,但你无法确认它调用的库又完全匹配,事实上这几乎是不可能完全匹配的。

 

正是这样本地库版本号的不一致,才使得需要调用本地库的JVM底层功能不能正确工作,所以清除,退出进程等工作就可能无法完成,产生了java defunct

 

知道了问题的原因,就能从多方面解决了。如果我们的JDKsrc版进行编译安装而不是用SUN提供好的本地库,当然不会存在上面的问题,但现在好象已经不提供src编译安装的发布包了,所以指定内核版本号,以便使它和JDK发布时使用的版本相一致,可以基本解决java defunct

 

假如你不知道当前JDK的本地库是基于什么内核版本号发布的,一般来说,应该提供系统当前的内核版本号:

 

Linux下,先查看当前的内核版本:

uname -r

2.4.21-4.EL

 

把主版本号COPY下来,调用:

LD_ASSUME_KERNEL=2.4.21-4

export LD_ASSUME_KERNEL

 

如果你知道某个版本的JDK中的本地库是基于某个内核版本发而布的那你可以直接指定LD_ASSUME_KERNEL为这个版本,这样会获得最大的一致性。




  上一篇: Jdk Installation of Solaris Pa...   下一篇: Mysql中max_allowed_packet参数设...
li
 §相关评论  
 热点文章

·RewriteRule重写规则的语法:A
·apache配置文件httpd.conf参数
·Apache的配置文件http.conf参数
·HTTP协议中POST、GET、HEAD等参
·XAMPP命令之LAMPP
·Linux中安装XAMPP(LAMPP)服务器
·网页禁止右键、禁止复制等代码
·java.lang.OutOfMemoryError:
·Mysql数据库在Linux系统常用命
·mysql问答:MySQL数据库连接过多
·MySQL数据库中Show命令的用法
li
 编辑推荐
·RewriteRule重写规则的语法:A
·apache配置文件httpd.conf参数
·Apache的配置文件http.conf参数
·HTTP协议中POST、GET、HEAD等参
·XAMPP命令之LAMPP
·Linux中安装XAMPP(LAMPP)服务器
·网页禁止右键、禁止复制等代码
·java.lang.OutOfMemoryError:
·Mysql数据库在Linux系统常用命
·mysql问答:MySQL数据库连接过多
·MySQL数据库中Show命令的用法
li
 相关篇章
·Jdk Installation of Solaris Pa...
·Unison使用参考大全
·Lvs调度策略研究
·Linux as4.2下Xfs文件系统的安装...
·Apache Prefork和Worker模式的性...
·神秘的DUAL
·drbd安装使用指南
·vmware三种网络连接
·如何设置MySQL同步(mysql双机热...
·Unison使用文档
·Mysql中max_allowed_packet参数设...
·在sun solaris下编译安装apache+...
·Sun solaris好站点推荐
·Rsh无密码登录设置
·Linux下修改网卡工作模式
·solaris系统管理员认证指南
·tomcat中的几点配置说明
·在Tomcat下禁止目录浏览功能
·mysql:如何让mysql支持中文gbk字...
·完美解决mysql数据库字符编码问题...
 
li
设为首页 | 关于我们 | 技术服务 | 收藏本站 | 网站地图 | 联系方式 | 本站友情连接