针对应用程序,一般关注的是内核CPU调度器功能和性能。ios
线程的状态分析主要是分析线程的时间用在什么地方,而线程状态的分类通常分为:网络
a. on-CPU:执行中,执行中的时间一般又分为用户态时间user和系统态时间sys。
b. off-CPU:等待下一轮上CPU,或者等待I/O、锁、换页等等,其状态能够细分为可执行、匿名换页、睡眠、锁、空闲等状态。socket
若是大量时间花在CPU上,对CPU的剖析可以迅速解释缘由;若是系统时间大量处于off-cpu状态,定位问题就会费时不少。tcp
//查看系统cpu使用状况 top //查看全部cpu核信息 mpstat -P ALL 1 //查看cpu使用状况以及平均负载 vmstat 1 //进程cpu的统计信息 pidstat -u 1 -p pid //跟踪进程内部函数级cpu使用状况 perf top -p pid -e cpu-clock
内存出现问题可能不仅是影响性能,而是影响服务或者引发其余问题函数
//查看系统内存使用状况 free -m //虚拟内存统计信息 vmstat 1 //查看系统内存状况 top //1s采集周期,获取内存的统计信息 pidstat -p pid -r 1 //查看进程的内存映像信息 pmap -d pid //检测程序内存问题 valgrind --tool=memcheck --leak-check=full --log-file=./log.txt ./程序名
磁盘一般是计算机最慢的子系统,也是最容易出现性能瓶颈的地方,由于磁盘离 CPU 距离最远并且 CPU 访问磁盘要涉及到机械操做,好比转轴、寻轨等。性能
//查看系统io信息 iotop //统计io详细信息 iostat -d -x -k 1 10 //查看进程级io的信息 pidstat -d 1 -p pid //查看系统IO的请求,好比能够在发现系统IO异常时,可使用该命令进行调查,就能指定究竟是什么缘由致使的IO异常 perf record -e block:block_rq_issue -ag ^C perf report
网络的监测是全部 Linux 子系统里面最复杂的,有太多的因素在里面,好比:延迟、阻塞、冲突、丢包等spa
//显示网络统计信息 netstat -s //显示当前UDP链接情况 netstat -nu //显示UDP端口号的使用状况 netstat -apu //统计机器中网络链接各个状态个数 netstat -a | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' //显示TCP链接 ss -t -a //显示sockets摘要信息 ss -s //显示全部udp sockets ss -u -a //tcp,etcp状态 sar -n TCP,ETCP 1 //查看网络IO sar -n DEV 1 //抓包以包为单位进行输出 tcpdump -i eth1 host 192.168.1.1 and port 80 //抓包以流为单位显示数据内容 tcpflow -cp host 192.168.1.1
//查看负载状况 uptime top vmstat //统计系统调用耗时状况 strace -c -p pid //跟踪指定的系统操做例如epoll_wait strace -T -e epoll_wait -p pid //查看内核日志信息 dmesg
参考连接:https://www.jianshu.com/p/0bbac570fa4c线程