目录一、内存-进程-CPU1.toptable of processes2.psprocess status3.pidstatprocess id statistics4.sarsystem activity reporter5.free排查CPU占用过高排查内存占用过高频繁minor gc频繁full gc二、磁盘1.dfdisk free2.iostatinput/output statistics3.sarsystem activity reporter三、网络1.netstatnetwork statistics2.tcpdumpdump tcp package3.sarsystem activity reporter一、内存-进程-CPU1.toptable of processes分两部分第一部分查看系统进程总数及运行、休眠状态下进程数、1/5/15分钟内等待CPU的进程数。用户进程、内核进程CPU使用率、等待IO的时间占比、空间时间占比。物理内存总量和已使用量、虚拟内存总量和已使用量。第二部分进程状态表包括进程id、优先级、使用内存、使用CPU时间、进程状态、CPU和内存占用率。# 查看单个进程的信息top-p123# 查看所属特定用户的进程top-uroot# 查看进程下的线程top-H-p12342.psprocess status进程状态表包括进程id、父进程id、创建时间、物理内存占用率、物理内存占用量、虚拟内存占用量、CPU占用率、进程状态。# 查看进程父子关系ps-ef# 查看进程状态和资源占用psaux3.pidstatprocess id statistics查看进程资源占用。# 查看进程磁盘IO每秒读写数据量、等待IO占比pidstat-d1# 查看进程内存缺页读磁盘、读缓存次数pidstat-r1# 查看进程自愿、强制切换CPU次数pidstat-w14.sarsystem activity reporter# 查看CPU使用率、等待IO的时间占比、空间时间占比。每1秒刷新sar-u1# 查看内存空闲量、可分配量、已使用量、使用率。虚拟内存大小。脏页数据量、活跃内存、可回收内存。页缓冲区、Inode缓冲区。每1秒刷新sar-r1# 查看就绪态排队进程数、阻塞态等待IO进程数sar-q15.free查看看内存和磁盘交换区空间用量。free-hw排查CPU占用过高top找到CPU占用过高的进程pidtop -p pid找到进程中CPU占用过高的线程tid通过JVM命令jstack pid | grep tid定位线程执行的哪个方法。排查内存占用过高jstat -gc pid查看年轻代、老年代总内存、已分配内存GC次数。如果GC次数正常可能是内存泄露问题导致对象无法被回收。jmap -histo pid查看各个对象类型占用堆内存的情况jmap -dump下载堆内存快照用Java VisualVM打开快照查看大内存占用的对象属于哪个类判断是否内存溢出或频繁创建大对象。频繁minor gcjstat -gc pid查看实时GC次数每秒打印如果GC次数频繁增加那么可能是对象创建频繁。jmap -histo pid查看各个对象占用堆内存是否合理是否有内存溢出。如果对象占用堆内存合理那么应该是年轻代空间分配过小-XX:NewSize增大新生代空间。频繁full gcjstat -gc pid查看实时老年代总内存、已分配内存每秒打印。如果full gc后已分配内存减少那么可能是大对象过多导致提前进入了老年代。如果full gc后已分配内存不变那么可能是有内存溢出问题或创建了过多长生命周期的对象。jmap -dump下载堆内存快照用Java VisualVM打开快照查看大内存占用的对象属于哪个类判断是否有内存溢出问题是否可以将大对象拆分。程序都正常那么尝试-Xms调整堆的大小。二、磁盘1.dfdisk free查看磁盘外存空间总量和已使用量。# 查看每个磁盘使用量df-h# 查看每个磁盘Inode使用量df-hi2.iostatinput/output statistics查看磁盘每秒读写请求次数r/s、w/s平均每秒读写数据量rkB/s、wkB/s平均每次读写大小rareq-sz、wareq-sz读写请求平均响应耗时r_await、w_awaitIO队列堆积请求数aqu-sz磁盘繁忙占比%util。# 查看磁盘io负载每1秒输出一次ipstat--x13.sarsystem activity reporter# 查看磁盘每秒IO总次数、每秒读数据量、每秒写数据量、单次IO平均数据量、IO队列堆积请求数、IO响应耗时、磁盘繁忙占比sar-d三、网络1.netstatnetwork statistics分两部分第一部分查看系统中socket列表包括socket类型、传输层协议、源IP:端口、目的IP:端口、所属进程ID、发送队列还有多少数据没发送、接收队列还有多少数据没接收。第二部分查看主机内部进程之间的管道通信列表准确来说是Unix本地套接字。netstat-anp2.tcpdumpdump tcp package抓TCP包获取源IP:端口、目的IP:端口、TCP标志位、数据包长度、传输内容。# 抓22端口的TCP报文tcpdump-ieth0 port22# 抓192.168.50.1IP的报文tcpdumphost192.168.50.13.sarsystem activity reporter# 查看网络每秒发送、接收数据包数量、数据量带宽利用率sar-nDEV1