问题:
用vmstat,top,和ps aux三个命令查看进程对cpu的占用率,数值差异很大。
例:
用 vmstat 查看系统cpu空闲率, id是cpu的空闲率,可以看出,空闲率一直在73%以上
用 ps aux 统计两个compress进程的cpu占用率,长时间恒定在15.5%和28.9%
用 top统计两个compress进程的cpu占用率,可以看出是一个动态变化的过程
(命令执行结果后面有显示)
这三个命令查出的cpu利用率不统一
首先,ps aux中两个compress进程占用cpu 15.5%+28.9%>40%,再加上其它进程,为
何vmstat查看cpu空闲率id还能一直大于73%
其次,top命令显示的进程compress的cpu占用率和ps显示的数值差别很大,ps的
cpu占用率雷打不动,一直是恒定值,
top的比较动态, 难道ps aux显示的进程cpu占用率不可靠?
最后,这三个命令查出的cpu占用率相互之间均不统一,用哪一个更可靠?例如输入如下命令,粗体字是cpu占用率
$ vmstat 1
procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
r b swpd free buff cache si so bi bo in cs us sy id wa
0 0 432 802660 28724 5747324 0 0 204 770 0 0 6 3 90 2
3 0 432 799196 28724 5747392 0 0 0 152 1455 681 2 2 96 0
0 0 432 802420 28724 5747460 0 0 0 480 1599 1892 10 8 82 0
0 0 432 802292 28724 5747664 0 0 0 440 1859 6179 14 13 73 0
2 0 432 797636 28724 5752084 0 0 0 240 1403 3419 8 7 85 0
1 0 432 798732 28724 5751268 0 0 0 448 1506 4608 10 8 81 0
2 0 432 797924 28724 5752084 0 0 0 192 1752 4332 11 10 79 0
0 0 432 802076 28724 5747936 0 0 0 280 1705 1527 14 6 79 0
$ps aux | grep compress
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
img 6569 15.5 0.2 36716 16540 ? S Aug12 230:57 ./bin/compress 8014
img 6570 28.9 0.2 54592 22524 ? S Aug12 430:28 ./bin/compress 8004
$top | grep compress
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
6569 img 16 0 40956 20m 6632 R 10.7 0.3 231:10.12 compress
6570 img 16 0 54592 21m 2456 S 20.3 0.3 430:54.32 compress
6569 img 17 0 36740 16m 2456 S 10.3 0.2 231:10.43 compress
6570 img 16 0 54592 21m 2456 R 58.9 0.3 430:56.09 compress
6569 img 16 0 36716 16m 2456 R 53.9 0.2 231:12.05 compress
6570 img 16 0 58444 24m 4752 R 69.9 0.3 430:58.19 compress
6569 img 16 0 36716 16m 2456 S 60.2 0.2 231:13.86 compress
6570 img 16 0 54592 21m 2456 S 52.6 0.3 430:59.77 compress
6569 img 15 0 36716 16m 2456 S 45.3 0.2 231:15.22 compress
大概看了些源码,补充一下:
top,ps,vmstat都是根据系统的proc文件进行计算的,其中vmstat,top都使用了/proc/stat文件,而ps,top也使用了/proc/*/stat文件进行计算。
1.vmstat对于cpu idle的计算方式比较复杂,但是显示的为平均值,即使用cpu使用时间片的差值/时间间隔/cpu个数(为物理cpu数目*cpu核心数),其中时间间隔为vmstat后加的参数,如vmstat 10就为10s内的平均cpu 占用率;
2.ps计算的为每个进程的cpu占用时间,使用的为/proc/*/stat文件,其中*为进程号,计算方式为使用cpu总的时间片数/Hertz,目前确认为对于每个物理cpu的占用比率,因此在双核机器上显示的数值需要除以核心数2;
3.top使用的是/proc/stat计算上面显示的cpu占用,使用/proc/*/stat计算每个进程占用的时间。但是计算的方式有所不同,代码较为复杂,但是目前确认为默认显示为Irix模式,即为相对于单个cpu core的占用的时间,如双核机器需要将该数值除以2*2计算,通过 shift+i可以进行切换;
通过上述说明可以解释珺方发现的问题:
问题1:首先,ps aux中两个compress进程占用cpu 15.5%+28.9%>40%,再加上其它进程,为何vmstat查看cpu空闲率id还能一直大于73%
ps的cpu占用率需要除以双核cpu数目为2,因此实际占用为(15.5%+28.9% )/2=22.2% ,也就约等于100%-73%;
问题2:其次,top命令显示的进程compress的cpu占用率和ps显示的数值差别很大,ps的cpu占用率雷打不动,一直是恒定值,top的比较动态, 难道ps aux显示的进程cpu占用率不可靠?
ps和top相差的数值为2倍关系,因此显示的占用率相差很大,同时变化率也会较大;
问题3:最后,这三个命令查出的cpu占用率相互之间均不统一,用哪一个更可靠?例如输入如下命令,粗体字是cpu占用率
这三个命令的占用率是统一的,按照如下公式进行计算时数据是一致的:
vmstat 的100%-idle == ps的cpu占用/cpu核心数 == top的cpu占用/cpu核心数/物理cpu数目;
- 浏览: 305630 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (279)
- java技术 (45)
- 存储技术 (6)
- 数据库技术 (29)
- 系统架构 (6)
- 项目管理 (0)
- 生活随想 (3)
- 性能优化 (22)
- OpenStack (0)
- 缓存技术 (3)
- 云计算 (1)
- linux (22)
- 网络通信 (12)
- 辅助开发 (1)
- web服务器和应用服务器 (6)
- 学习感悟 (2)
- 大数据技术(hadoop) (6)
- 高性能分布式系统 算法 (1)
- zookeeper (0)
- 算法 (4)
- dubbo (1)
- java技术 jvm (5)
- 系统设计 (1)
- 缓存失效算法比较 (1)
- javascript (1)
- maven (3)
- 设计模式 (13)
- spring以及常用框架 (5)
- SOA框架 (5)
- 监控系统 (1)
最新评论
-
kongdong88:
Netty简单应用与线上服 ...
用Netty实现的一个简单的HTTP服务器 -
phili1999:
兄弟,此乃Eclipse的bug,至今未解决,可见国人地位低啊 ...
eclipse的控制台在UTF-8编码下键盘输入BUG问题,请问有谁能解决 -
xiaguobing:
谢谢分享啊
MetaQ初探 -
ih0qtq:
...
java性能编码规范整理
发表评论
-
最佳线程数和QPS以及RT
2013-08-16 09:13 1089最近在关注性能的事情,所以对于多线程程序中,如何设置最佳的 ... -
BTrace使用总结
2013-08-15 09:57 979一、背景 ... -
BTrace使用简介
2013-08-15 09:55 639很多时候在online的应用出现问题时,很多时候我们需 ... -
tomcat cpu占用过高,系统负载高问题跟踪
2013-08-15 09:53 2418线上8核 linux服务器,负载为8为正常情况,目前C ... -
Linux下如何查看高CPU占用率线程 LINUX CPU利用率计算
2013-08-14 16:13 8694可以用下面的命令将 cpu 占用率高的线程找出来: ps ... -
Linux下高效的使用 top 命令
2013-08-14 15:33 885对桌面用户来说,监视系统资源使用是一项重要的工作。通过这项 ... -
jstat使用方法
2013-08-14 15:15 716用以判断JVM是否存在 ... -
转 探索 ConcurrentHashMap 高并发性的实现机制
2013-08-14 10:16 516简介 ConcurrentHashMap 是 util. ... -
JAVA线程池的分析和使用
2013-08-14 10:11 8821. 引言 合理利用线程池能够带来三个好处。第一: ... -
MAT工具介绍
2013-08-13 09:17 881为什么用MAT 之前的观点,我认为使用实时prof ... -
使用TestNG进行多线程压力测试
2013-08-12 23:18 8591、在项目中加入: <dependency> ... -
聊聊内存泄露
2013-08-12 17:42 8631.什么是内存泄露 看到网上有很多人都在问内存泄露与内存 ... -
使用JMeter的Java请求功能测试Hetty性能
2013-08-12 17:24 8241.JMeter介绍 JMeter是Apache组织的开 ... -
网站性能优化的三重境界
2013-08-11 10:53 886文章是关于网站性能优化体验的,性能优化是一个复杂的话题,牵 ... -
Tomcat Production Server – Performance Tuning
2013-08-09 11:38 878简介 考虑一下这种场景,你开发了一个应用,它 ... -
Tomcat6 Optimize
2013-08-09 11:31 1027实验条件 数据库服务 ... -
tomcat优化(全)
2013-08-09 11:30 7601.内存设置(VM参数调 ... -
Tomcat高并发配置
2013-08-09 09:36 786java 环境配置: export JAVA_OPTS ... -
Tomcat性能调优方案
2013-08-09 09:29 544一、操作系统调优 对 ... -
Linux查看连接数,并发数
2013-08-08 02:31 8471、查看apache当前并发访问数: www ...
相关推荐
在Linux操作系统中,掌握如何查看进程的CPU占用率是系统管理员和开发者必备的技能之一。这一过程涉及到对系统监控工具的使用,理解进程与CPU之间的交互,以及如何解析输出信息。下面将详细介绍如何在Linux环境下查看...
1. `top`或`htop`:列出所有运行的进程,按照CPU占用率排序,便于找出占用CPU较高的进程。 2. `ps`命令:可以查看特定进程的CPU使用情况,例如`ps -aux`会显示所有进程的信息。 3. `mpstat`:报告每个CPU核心的活动...
1. **BSD风格的ps命令**:`/usr/ucb/ps -aux` 命令可以显示所有进程及其占用CPU和内存的详细信息。`-a`选项显示所有用户进程,`-u`显示以用户为主的格式,`-x`则包括没有控制终端的进程。通过`more`分页器可以查看...
10. **ps命令**:ps用于报告当前系统的进程状态,`ps aux`将显示所有用户的所有进程信息,包括PID、用户、CPU占用率、内存占用等。 这些命令的组合使用可以帮助管理员快速定位系统性能问题,无论是CPU过载、内存...
- `ps aux`:这个组合是最常用的,它显示所有用户的进程信息,包括进程ID、用户、CPU占用率、内存占用率、命令等。 2. **常用选项**: - `-a`:显示除init进程外的所有进程。 - `-u`:按用户名显示进程。 - `-x...
4. **`iostat`**:用于监控系统I/O统计,如果CPU使用率高但`top`或`ps`显示不出明显问题,可能需要检查磁盘I/O。 5. **`mpstat`**:显示每个处理器的活动状态,有助于在多核/多CPU系统中定位问题。 6. **`sar`...
例如,当系统响应变慢时,可以先用top查看整体资源占用,然后用iostat和vmstat分析I/O和内存是否存在问题,最后可能还需要借助strace等工具跟踪特定进程的行为,找出性能瓶颈。记住,每一个命令都是解决问题的有力...
- P: 按CPU占用排序。 - M: 按内存占用排序。 - 1: 显示每个CPU的信息。 - **mpstat -P ALL 1**:显示多处理器统计数据。 - **sar**:用于收集、报告和保存系统活动信息,可以查看历史数据和实时数据。例如: - ...
- `ps aux | sort -rn +2`: 用于查看CPU使用率最高的进程。 - `ps aux | sort -rn +3`: 用于查看内存使用率最高的进程。 #### 九、磁盘I/O监控指标 - `rrqm/s`: 每秒进行合并的读请求数量。 - `wrqm/s`: 每秒进行...
2. **CPU占用率**:通过`top`或`htop`命令查看CPU利用率,过高可能表示系统负载过大。 3. **内存使用情况**:使用`free -m`或`vmstat`命令查看物理内存和交换区的使用情况,包括空闲、缓冲和缓存的内存。 4. **...
- **`ps aux`**:查看所有进程及其使用的资源情况,其中 `RSS` 表示实际占用的物理内存大小。 - **`ps -p <Java Process ID> -o rss`**:查询特定 Java 进程的内存使用情况。 - **关键概念** - **虚拟内存**:...
使用`free -m`、`uptime`、`top`和`htop`监控CPU和内存使用情况,判断是否存在内存不足、交换分区使用、CPU核心负载不均等问题。 7. **硬件状态**: 通过`lspci`、`dmidecode`和`ethtool`检查硬件信息,如RAID...
- **CPU**:`top`或`htop`实时监控CPU使用率,`mpstat`报告每个CPU的统计信息。 - **磁盘**:`df`显示磁盘空间,`du`计算目录或文件大小。 3. **Java线上问题排查**: - 使用`jstack`分析Java线程堆栈,找出死锁...
`ps`用于报告当前系统中进程的状态,特别是`ps -aux`常用来查看CPU占用率。`sar`是System Activity Reporter,它可以收集并报告系统活动,包括CPU利用率。`time`命令用于测量程序运行的时间,帮助识别性能瓶颈。`...
- **判定条件**: 无`zombie`状态的进程,进程总数不超过500个,任一进程的CPU占用率不能长时间保持不变。 - **补充说明**: 可通过`ps aux | grep Z`查找僵尸进程及其父进程,并进行相应处理。 - **检查项目**: 内存...
进一步,使用 `$ pstree -a` 和 `$ ps aux` 查看当前运行的进程,找出占用资源的进程。`$ netstat -ntlp`、`-nulp` 和 `-nxlp` 用于识别监听的网络服务,确认它们是否正常运行。如果发现异常,可能需要检查服务配置...
1. **监控CPU使用率**:可以使用`top`命令实时查看CPU使用情况,或者用`ps -aux`命令获取各个进程的CPU占用率。为了计算总体CPU利用率,通常会取一段时间内的平均值,以避免瞬间高峰的影响。例如: ```bash cpu_...
此命令将显示所有用户的进程列表,包括每个进程的PID(进程ID)、用户、CPU使用率、内存使用率等信息。 #### 三、w - 查看在线用户信息 `w` 命令可以显示当前登录的用户列表以及他们正在使用的资源情况。该命令...