摘要:在日常开发、测试或者运维,都需要关注系统或者进程的性能,运行状态等问题,既然是性能的问题就离不开内存、CPU、I/O。所以本篇文章主要讲述如何查看整个系统、单个进程、线程的cpu、内存使用,进程的端口号,进程在哪个cpu核上运行, I/O详情。
整篇文章还是老规矩。直接结合场景分析命令,关于这个命令,建议看完之后在Linux环境下用man 或者 --help详细看一遍
这里不会去列出命令后的输出,只做一个指引,希望看到的人都去动手实验一下,经过自己的思考加深理解
查看系统详情
查看系统cpu
- 常用命令 top
按cpu占用排序显示进程: top命令后按P
按内存占用排序显示进程:top命令后按M
- 查看cpu多核运行详情
mpstat -p ALL 3 3 ( 说明:每3秒刷新一次,总共刷新3次 )
sar -p ALL
vmstat -n 3 3
查看系统内存
free -h
查看系统I/O
iostat -x 1 (每隔一秒输出一次)
查看系统磁盘
lsblk
fdisk
查看磁盘挂载信息
有时候挂载的磁盘突然出现问题,只能读不能写,或者其它问题,使用mount可以看到所有磁盘的基本属性,没行的后面会有rw或者ro的磁盘模式,这里可以简单知道目前挂载磁盘是否正常。
mount
查看系统日志
使用dmesg查看系统日志,可以查看到内核、设备一些日志。如果一个磁盘出现读写异常、或者应用出现问题、使用dmesg可以帮你定位问题
dmesg
/var/log/message (centos)
查看进程、线程详情
查看进程占用端口号:
netstat -nap | grep httpd
查看进程、线程正在占用哪个cpu核
-
pidstat -p
说明:
使用pidstat -p 会得到一下输出,红框CPU就是代码正在使用的CPU核。还可以使用-t 参数来定期输出。只运行pidstat则是会默认允许pidstat -p ALL
注意: 详细请使用man pidstat 查看文档
-
使用top命令
- 运行top命令
- 键入f
- 把 P = Last Used Cpu (SMP) 这行设置成display(即前面有个* 号,代表显示)
查看进程、线程内存、cpu使用详情
top -p
ps -aux
cat /proc//status
查看进程、线程I/O使用
pidstat -p -d 1
iotop -p ( 注意:需要按装iotop工具 )
查看进程开启的线程详情
前段时间使用memcached的时候,发现服务异常,提示open file too many的错误,这就需要查看进程的线程数,和究竟是哪个线程占用了连接。
- 查看线程数:
cat /proc//fd | wc -l
- 查看线程连接情况
losf -p
- 通过端口号查看对端连接的线程名
lsof -i:PORT_ID
sysstat的简单说明
分析Linux服务器的性能,sysstat是一个非常方便的工具,它包含sar、mpstat、 pidstat、vmstat、iostat下面把从man查看到的描述信息贴出来,方便了解每个命令具体的使用场景。最这些命令的学习最好的方式就是通过man来阅读文档,非常详细。
/proc 虚拟文件系统
读
这个虚拟文件系统非常的强大,sysstat工具很多都是依赖proc的信息的,这里有非常多的信息,通过读取文件的形式可以获得很多系统,进程的信息。
- /proc/cpuinfo - CPU 的信息 (型号, 家族, 缓存大小等)
- /proc/meminfo - 物理内存、交换空间等的信息
- /proc/mounts - 已加载的文件系统的列表
- /proc/devices - 可用设备的列表
- /proc/filesystems - 被支持的文件系统
- /proc/modules - 已加载的模块
- /proc/version - 内核版本
- /proc/cmdline - 系统启动时输入的内核命令行参数
除了上述的这些目录,还能根据具体的进程pid来查看进程详情,比如状态,cpu,线程数等等
写
proc 虚拟文件系统,不仅支持读取,还能支持写入。写入的主要场景是需要和内核做交互,修改内核的参数等,之前的[Linux内核参数延申](%3Ca href=“https://blog.csdn.net/energysober/article/details/89083828”%3Ehttps://blog.csdn.net/energysober/article/details/89083828%3C/a%3E)的文章就是修改了/proc下的某些参数,达到与内核交互的目的。