如何控制特定进程的系统负载? 例如。 Java的

所以Java一直在挂我们的系统。 我们的开发人员仍然在研究这个,但作为一个pipe理员可以做什么。

在一个共有8个核心的双sockets系统上,在40的负载峰值。白天平均:平均负载:17.78,23.18,24.71根据这个: http : //blog.scoutapp.com/articles/2009/07/ 31 /理解的负载平均值
这是不正常的。

除了升级系统之外,可以做些什么呢? 我们的问题目前是随机系统挂起“任务java:4242被阻塞超过120秒”,然后在高负载恐慌。

可以做什么?

平均负荷:21.40,21.76,21.80

iostat的:

avg-cpu: %user %nice %system %iowait %steal %idle 13.75 0.00 0.49 0.00 0.00 85.77 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn xvda 2.16 1.82 32.63 832500 14917166 

vmstat的:

  procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu---- rb swpd free buff cache si so bi bo in cs us sy id wa 0 0 21172 1272200 138540 583268 0 0 0 3 9 5 14 0 86 0 

最佳:

 top - 14:41:02 up 5 days, 7:26, 2 users, load average: 23.01, 22.17, 21.82 Tasks: 103 total, 1 running, 102 sleeping, 0 stopped, 0 zombie Cpu(s): 0.0%us, 0.0%sy, 0.0%ni,100.0%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st Mem: 5291864k total, 4017092k used, 1274772k free, 138544k buffers Swap: 1959924k total, 21172k used, 1938752k free, 583332k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 25637 root 20 0 1691m 559m 13m S 2 10.8 4:46.91 java 848 root 20 0 3044m 2.3g 9844 S 1 45.4 5521:37 java 27729 root 20 0 19272 1272 948 R 0 0.0 0:00.03 top 1 root 20 0 23760 1696 1200 S 0 0.0 0:01.49 init 2 root 20 0 0 0 0 S 0 0.0 0:00.00 kthreadd 3 root 20 0 0 0 0 S 0 0.0 0:00.29 ksoftirqd/0 4 root 20 0 0 0 0 S 0 0.0 0:00.00 kworker/0:0 

我觉得还有别的事情,你没有看过或告诉过我们。

  • 你没有I / O问题,甚至是一个非常显着的I / O负载
  • 你不是在裸机上运行。 xvda是虚拟设备的指标。
  • 你有“世界上所有的时间” – 尽pipe有很高的平均负载显示,但你的系统报告为85%闲置。

这是我最有可能的猜测:

  • 你在错误的时间拿走了示范快照。 CPU实际上更加沉重,你应该使用像sar这样的工具来进行报告。 atop也是我的最爱。
  • 你有一个普遍的低负载,但非常高的瞬间爆发,使整体平均负载高。
  • 您遇到了一个隐藏的错误或硬件问题。 你应该发布logging的死亡进程的堆栈跟踪,以便我们可以猜测在哪里。

至于这个问题本身的话题:降低平均负载的唯一方法是减less主动竞争CPU时间的进程数量。