索姆背景信息;
服务器;
具有130 GB Ram的新SLES 12服务器旨在为大型数据库(150G +数据)运行MySQL.
服务器还将托管一些Java应用程序.
Java版本(默认来自Oracle) - Java(TM)SE运行时环境(版本1.7.0-b147) - Java HotSpot(TM)64位服务器VM(版本21.0-b17,混合模式)
我们偶然发现了以下问题;
运行一些特定的Java应用程序会使kerne/system cpu峰值减慢/暂停应用程序一段时间.我通过制作一个Java应用程序来重现它,它只是随着时间的推移而占用内存并使用一些cpu.
调查显示在减速期间(10000-25000)有大量的中断.
每次放缓之后,Java都会获得更多内存.将Java设置为以固定内存开始似乎也可以减少问题(将-Xmx和-Xms设置为相同的值).详细垃圾收集也表明GC正在开始并可能成为触发器.
由于某种原因,GC和内存分配非常昂贵,我们不确定从这里查看.来自GC的详细信息:
[GC^C 1024064K->259230K(3925376K), 87,3591890 secs]
Run Code Online (Sandbox Code Playgroud)
在低端linux服务器上运行GC的同一程序(从SUN运行SLES,Java 1.6.0_11);
[GC 1092288K->253266K(3959488K), 3.0125460 secs]
Run Code Online (Sandbox Code Playgroud)
在减速期间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 …Run Code Online (Sandbox Code Playgroud)