java - Java程序的vmstat pidstat结果分析

标签 java linux context-switch

vmstat 1 100

procs ------------memory------------ ---swap-- -----io---- --system-- --- --cpu-----

r b swpd free buff cache si so bi bo in cs us sy id wa st

1 0 0 2307452 283392 712136 0 0 2 2 17 21 0 1 99 0 0
3 0 0 2307436 283392 712136 0 0 0 0 10677 3455 21 43 35 0 0
4 0 0 2307436 283392 712136 0 0 0 0 10700 3620 22 42 36 0 0
3 0 0 2307436 283392 712136 0 0 0 0 10549 3523 21 43 36 0 0

pidstat -I -w -p 3809 2

PID cswch/s nvcswch/s 命令

3809 0.00 0.00 java

3809 0.00 0.00 java

3809 0.00 0.00 java

我正在进行压力测试。服务器程序是一个 WebSocket 服务器,它接受 10,000 个客户端连接。每个客户端连接每 2 秒向服务器发送一条消息,服务器每 2 秒向每个客户端响应一条消息。

我的问题是:

1) 从 vmstat 1 100 来看,似乎 cpu(sy 是 42%,us 是 21% 左右)正在做很多系统级的工作而不是用户级的工作。所以我认为 CPU 的上下文切换太多了。

但是,从pidstat来看,服务器程序的cswch/snvcswch/s都是0。我认为这个结果意味着 CPU 没有太多的上下文切换。

谁能帮忙解释一下linux服务器的监控结果?

最佳答案

  • pidstat 正在引用进程 3809
  • vmstat 正在测量系统的所有进程,因为您只设置了采样频率

关于java - Java程序的vmstat pidstat结果分析,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33536019/

相关文章:

java - Spring boot 请求与调度的映射

java - jar 无法找到音频文件

java - 将 json 输出作为参数传递给 java 中的 linux 程序

multithreading - 关闭超线程时的最佳线程数

mysql - 有没有办法确定导致 Linux 上下文切换的原因?

c++ - 通过sigsetjmp和longsetjmp恢复环境

java - 为什么 Primefaces 不刷新我的按钮?

java - 日期检查器无法工作 - 漏报

linux - 在守护进程使用时监视日志文件

c - 如何解决从 mmap() 返回的字符串中缺少 NUL 终止符的问题?