所以 Java 一直困扰着我们的系统。我们的开发人员仍在调查此事,但作为管理员,我们能做些什么呢?
在总共有 8 个核心的双插槽系统上,负载峰值在 40 时达到。白天平均负载:17.78、23.18、24.71 根据此:http://blog.scoutapp.com/articles/2009/07/31/understanding-load-averages
这不正常。
除了升级系统,还能做什么呢?我们目前的问题是系统随机挂起,出现“任务 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
虚拟机状态:
procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
r b 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
答案1
简而言之,nice
。
答案2
我觉得还发生了一些你没有注意到或者没有告诉我们的事情。
- 您没有 I/O 问题,甚至没有显著的 I/O 负载
- 您不是在裸机上运行。
xvda
是虚拟设备的指示器。 - 你拥有“充足的时间”——尽管显示的平均负载很高,但你的系统报告的空闲率为 85%。
以下是我最有可能的猜测:
- 您在错误的时间拍摄了演示快照。CPU 实际上负担更重,您应该使用类似 的工具
sar
进行报告。atop
也是我的最爱。 - 您的负载通常较低,但瞬间突发量非常高,导致总体平均负载较高。
- 您遇到了一个隐蔽的错误或硬件问题。您应该发布已终止进程的堆栈跟踪记录,以便我们猜测问题出在哪里。
至于问题本身的主题:降低平均负载的唯一方法是减少主动竞争 CPU 时间的进程数量。