`
java-mans
  • 浏览: 11738743 次
文章分类
社区版块
存档分类
最新评论

java defunct产生的原因和解决办法

 
阅读更多
javadefunct产生的原因和解决办法:

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

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

产生的原因:
以前我们下载JDK时,可以下载到JDK的SRC然后自己编译,现在的官方网站上已经找不到可以自己编
译的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底层功能不能正确工作,所以清除,
退出进程等工作就可能无法完成,产生了javadefunct。

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

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

在Linux下,先查看当前的内核版本:
uname-r
2.4.21-4.EL
把主版本号COPY下来,调用:
LD_ASSUME_KERNEL=2.4.21-4
exportLD_ASSUME_KERNEL

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

相关推荐

    DEFUNCT

    每种字体都有其独特的美学价值和应用场景,即使是“DEFUNCT”的字体,也有可能在特定场合下重新焕发新生。 总的来说,“DEFUNCT”这个标题提示我们关注那些被时间遗忘的IT元素,尤其是字体设计。它们不仅是技术进步...

    ccc013#Study-Notes#如何杀死defunct进程1

    参考文章如何杀死defunct进程(译)首先是通过下面的命令找到父进程的PID输出结果为:其中:如果你使用命令 “kill -9 40428” 尝试杀死 ID

    defunct:函数式辅助函数库

    $ npm install defunct 示例用法 var d = require ( 'defunct' ) ; it ( 'should be able to multiply' , function ( t ) { var mul = d . mul ( 10 ) ; t . equal ( mul ( 5 ) , 50 , 'multiply' ) t . end ( )...

    python僵尸进程产生的原因

    在 unix 或 unix-like 的系统中,当一...On Unix and Unix-like computer operating systems, a zombie process or defunct process is a process that has completed execution (via the exit system call) but still

    flotilla-defunct:一个基本且可扩展的 Go web 框架

    7. **依赖管理**: Go 采用 Go Modules 进行依赖管理,Flotilla-Defunct 可能会利用这一特性,使得项目依赖的库版本易于管理和升级。 **学习 Flotilla-Defunct** 即使 Flotilla-Defunct 已经废弃,它的源码仍然是...

    defunct-开源

    标题“defunct-开源”可能指的是一个已停止维护或废弃的开源项目。在IT行业中,开源软件是指源代码可以自由查看、使用、修改和分发的软件。这种类型的软件通常由社区驱动,开发者们共同协作以改进代码和添加新功能。...

    [defunct] Chemical Resource Kit-开源

    【标题】"Chemical Resource Kit" 是一个曾经活跃但现在已停产的开源项目,专为合成化学家设计。...通过深入理解这些文件和源代码,用户可以从中获取到化学计算、建模和数据处理的知识,并可能启发新的科研方法或工具。

    pubpatternsapi:PubPatterns REST API(DEFUNCT)

    PubPatterns REST API,尽管现在已经废弃,曾经是一个重要的工具,尤其对于那些关注出版业...此外,分析废弃项目的原因也可以帮助我们理解技术演进和市场需求变化对项目的影响,这对于未来项目规划和决策具有借鉴意义。

    Surfaw (defunct, renamed to Surfraw)-开源

    总的来说,Surfaw展示了开源软件如何通过社区的力量提供创新解决方案,并满足特定用户群体的需求。尽管它已经不再是当前最新的技术,但其设计理念和实现方式仍然值得我们去了解和探索。在开源的世界里,每个项目都...

    devpost:[DEFUNCT]面向开发人员的小型Git感知Web服务器

    我启动DevPost就是为了解决这个问题,但这只是因为我不知道那里有一些非常好的工具可以做到这一点,例如上面提到的浏览器同步。 由于我宁愿没有的案例,因此我选择中止开发DevPost以便推荐浏览器同步。 DevPost...

    TallyMan E-Commerce (defunct)-开源

    TallyMan在2000年被废弃。TallyMan是功能齐全的,高度可定制的商业和站点管理系统。 100%纯Perl / Embperl。

    杀不死的进程

    - 如果需要在`attachBaseContext`方法中执行某些操作,可以通过重写`attachBaseContextByDaemon`方法实现。 3. **进程测试与验证:** - 配置完成后,需要对进程进行测试,确认在各种极端条件下进程是否能够保持...

    defunct-template-scala-parallel-universal-recommendation

    模板标量并行多模式推荐该推荐器旨在考虑广泛的用户行为,项目内容和上下文信息,以提供实时推荐。 它包含用于处理事件的高度灵活的机制,这些事件合并了用户整个点击流的任何重要部分。 它还可以几种方式混合基于...

    engine-defunct:Engine 是驱动 Go web 框架的核心

    在这个例子中,`gin.Default()` 创建了一个默认配置的 Engine,然后通过 `GET` 方法定义了一个路由,当访问 `/ping` 时返回 JSON 响应。 总之,Engine 是 Go Web 框架的心脏,它提供了构建高效、可扩展 Web 应用的...

    Marmot:[defunct] 基于 Theano 的神经网络框架

    特征: 前馈和循环网络具有各种学习率策略的 SGD 目前只修复了 LR 和 Adadelta,但很容易添加其他CTC(Connectionist Temporal Classification)用于在没有事先序列对齐的情况下训练 RNN L2 正则化,提前停止即将...

    web-specs:Web浏览器中Dat协议的规范[DEFUNCT。 现在使用DEP回购。]

    链接到工作模块和实施。 充当讨论规格和提出更改建议的场所。 由于我们尚未进入任何标准轨道(即WHATWG或W3C),因此此回购协议将使用非正式规范。目录会费建议的更改将在问题和请求中讨论。 达成共识后, ...

    IBM磁盘阵列及MSCS维护手册

    《IBM磁盘阵列及MSCS维护手册》详尽阐述了IBM磁盘阵列和MSCS的维护流程,包括各种状态识别、问题诊断以及...正确使用ServeRaid Manager等管理工具,可以有效地预防和解决可能出现的问题,确保数据安全和系统稳定性。

    Linux下Tomcat重新启动

    具体来说,我们可以使用 ps -ef|grep java 命令来检查 Tomcat 的进程。如果 Tomcat 还没有关闭,这个命令将显示 Tomcat 的进程信息。 如果 Tomcat 还没有关闭,我们可以使用 kill 命令来强制关闭 Tomcat。kill 命令...

Global site tag (gtag.js) - Google Analytics