Linux使用运行Java GC的系统内核CPU【JAVA教程】

!
也想出现在这里? 联系我们
信息

Linux使用运行Java GC的系统内核CPU,第1张

概述Linux使用运行Java GC的系统/内核CPU

索姆背景信息;

服务器;

新的SLES 12服务器,配有130 GB的RAM,用于为大型数据库(150G +数据)运行MysqL。

服务器还将托pipe一些Java应用程序。

为什么垃圾收集在windows 10 UWP应用程序中运行得太频繁?

在CentOS中禁用UseGCOverheadlimit

windows和linux上的内存页面写入检测

linux上Java 1.7(45)中使用的默认GC是什么?

GC暂停和杀死-Stop产生相同的行为?

Java版本(默认为Oracle) – Java™SE运行时环境(build 1.7.0-b147) – Java HotSpot™64位服务器VM(build 21.0-b17,混合模式)

我们偶然发现了以下问题。

运行一些特定的Java应用程序使得kerne /系统cpu峰值减速/停止应用程序的时间周期。 我已经通过制作一个简单地随时间消耗内存并使用一些cpu的Java应用程序来转载它。

调查显示,经济放缓期间(10000-25000)的数量较多。

在每次减速之后,Java已经获得了更多的内存。 将Java设置为以固定内存启动似乎也可以减less问题(将-Xmx和-xms设置为相同的值)。 垃圾收集也表明,GC正在踢,可能是触发器。

GC和内存分配由于某种原因是非常昂贵的,我们不确定从哪里看这里。 GC详细说明:

[GC^C 1024064K->259230K(3925376K),87,3591890 secs]

在低端的linux服务器上运行GC(运行SLES,SUN公司的Java 1.6.0_11);

[GC 1092288K->253266K(3959488K),3.0125460 secs]

top在减速期间:

top – 11:23:33 up 87 days,19:55,5 users,load average: 14.27,4.50,10.17 Tasks: 250 total,39 running,211 sleePing,0 stopped,0 zombIE cpu(s): 0.0%us,71.8%sy,0.0%ni,28.2%ID,0.0%wa,0.0%hi,0.0%si,0.0%st Mem: 129033M total,128576M used,457M free,1388M buffers Swap: 32765M total,13M used,32752M free,113732M cached

vmstat减速期间(从第3行开始);

procs ———–memory———- —swap– —–io—- -system– —–cpu—— rb swpd free buff cache si so bi bo in cs us sy ID wa st 0 0 13552 1714328 1422268 116462260 0 0 10 9 0 0 0 0 100 0 0 1 0 13552 1241780 1422268 116462292 0 0 0 0 240 353 1 0 99 0 0 1 0 13552 695616 1422268 116462292 0 0 0 17 419 431 3 0 97 0 0 55 0 13552 486384 1422268 116462292 0 0 0 2 20228 458 1 57 43 0 0 75 0 13552 476172 1422268 116462300 0 0 0 8 12782 684 0 70 30 0 0 65 0 13552 470304 1422268 116462304 0 0 0 0 13108 792 0 72 28 0 0

为什么GC在高端服务器上比在低端服务器上如此昂贵? 任何想法在哪里寻找线索?

更新 – 调用参数2012-11-26调用参数;

java -Xmx4g -xms4g -verbose:gc -server -cp \”./dest/\” UseMemoryMain

给予

[GC^C 1024064K->259230K(3925376K),3591890 secs]

变成;

java -Xmx4g -xms4g -XX:+UseParallelGC -verbose:gc -cp \”./dest/\” UseMemoryMain

给予

[GC 1048640K->265430K(4019584K),0902660 secs]

变成;

java -Xmx4g -xms4g -XX:+UseConcmarkSweepGC -verbose:gc -cp \”./dest/\” UseMemoryMain

给予

[GC 1092288K->272230K(3959488K),1791320 secs]

真正有趣的是今天重新运行,而不告诉使用哪种GC方法。

java -Xmx4g -xms4g -verbose:gc -server -cp \”./dest/\” UseMemoryMain

给予

[GC 1024064K->259238K(3925376K),0839190 secs]

Java已经改变了违约GC的策略…

C ++标准库和Boehm垃圾收集器

什么原因导致在执行GC时,在安全点应用程序线程暂停期间vmop时间增加

使用WMI获取垃圾收集器指标

什么是实时系统的良好日志logging库(快速且不创build对象)?

Java程序运行一段时间后变慢了

垃圾收集确实是一个棘手的话题。 为了给出最好的答案,你应该发布完整的命令行来调用java。

正如你所说的与GC开关搁浅有所帮助。 原因在于,对于现在使用的许多应用程序,缺省设置不是最佳的。 对于许多需要快速响应的应用程序,因为它们是交互式的参数

-XX:+ UseConcmarkSweepGC

会有很大的不同

值得注意的是,使用你提到的JVM,使用更大的堆(可以说更大的10GB)总是需要一些调整。 以GC日志为准,并观察在使用GC选项时行为如何变化。 我会建议尝试不同的收集器策略(如CMS,或G1),也玩伊甸园空间的配置(如Xmn)。

最后但并非最不重要的是,您可以使用分析器来调查应用程序使用内存所做的工作。 也许代码可以改进,因此可以避免大量的GC。

总结

以上是内存溢出为你收集整理的Linux使用运行Java GC的系统/内核CPU全部内容,希望文章能够帮你解决Linux使用运行Java GC的系统/内核CPU所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

© 版权声明
THE END
喜欢就支持一下吧
点赞194 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容