# linux 查看 cpu 和内存占用 {#linux-查看-cpu-和内存占用}
本文总结了查看 linux 系统的 cpu 或内存占用情况的常用方法。
# top {#top}
top 命令可以同时查看 cpu 和内存使用情况
top - 14:09:53 up 4:29, 6 users, load average: 1.10, 0.93, 0.69
Tasks: 309 total, 1 running, 307 sleeping, 0 stopped, 1 zombie
%Cpu(s): 1.6 us, 6.6 sy, 1.0 ni, 90.0 id, 0.5 wa, 0.0 hi, 0.2 si, 0.0 st
KiB Mem : 16336104 total, 547904 free, 9164624 used, 6623576 buff/cache
KiB Swap: 3905532 total, 3893976 free, 11556 used. 6312108 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
11075 wangshi+ 20 0 5820888 3.101g 2.997g S 23.8 19.9 60:14.94 VirtualBoxVM
1966 root 20 0 554264 156284 80680 S 2.6 1.0 5:19.19 Xorg
3833 wangshi+ 20 0 3264888 126952 67944 S 2.6 0.8 5:29.31 kwin_x11
8317 wangshi+ 20 0 6227920 970480 72868 S 2.3 5.9 3:58.14 java
# htop {#htop}
htop 是 top 的升级版,可以图形化形式显示,更直观。但是系统默认不会安装。
# free 命令查看内存占用 {#free-命令查看内存占用}
free -h
(py3.6) wangshibiao@wangshibiao:~$ free -h
total used free shared buff/cache available
Mem: 15G 8.9G 425M 372M 6.2G 5.8G
Swap: 3.7G 11M 3.7G
(py3.6) wangshibiao@wangshibiao:~$
提示
从应用程序角度看,真正剩余内存并非 free 列的值,而是 available 列的值
available 不仅包含未使用内存,还包括了可回收的缓存,所以一般会比未使用内存更大。不过,并不是所有缓存都可以回收,因为有些缓存可能正在使用中。公式如下:
available = free + (buff/cache 通过一个算法后产生的值)
# 一条命令查看 cpu 和内存使用率 {#一条命令查看-cpu-和内存使用率}
echo -e $(top -n 2 | grep Cpu | tail -n 1 | sed 's/ //g' | awk -F , '{print $4}' | awk -F 'id' '{print "CpuFree:"$1"%"}')'\nMemFree:'$(MemFree=$(($(cat /proc/meminfo | egrep "MemFree" | sed 's/[^0-9]//g')+$(cat /proc/meminfo | egrep "Buffers" | sed 's/[^0-9]//g')+$(cat /proc/meminfo | egrep "^Cached" | sed 's/[^0-9]//g'))) && MemTotal=$(cat /proc/meminfo | egrep "MemTotal" | sed 's/[^0-9]//g') && awk 'BEGIN{printf "%.2f%\n", '$MemFree/$MemTotal*100'}')
(py3.6) wangshibiao@wangshibiao:~$ echo -e $(top -n 2 | grep Cpu | tail -n 1 | sed 's/ //g' | awk -F , '{print $4}' | awk -F 'id' '{print "CpuFree:"$1"%"}')'\nMemFree:'$(MemFree=$(($(cat /proc/meminfo | egrep "MemFree" | sed 's/[^0-9]//g')+$(cat /proc/meminfo | egrep "Buffers" | sed 's/[^0-9]//g')+$(cat /proc/meminfo | egrep "^Cached" | sed 's/[^0-9]//g'))) && MemTotal=$(cat /proc/meminfo | egrep "MemTotal" | sed 's/[^0-9]//g') && awk 'BEGIN{printf "%.2f%\n", '$MemFree/$MemTotal*100'}')
CpuFree:85.0%
MemFree:38.39%
(py3.6) wangshibiao@wangshibiao:~$