当前位置: 首页 > Linux

[Linux]常用命令及服务器异常分析定位

时间:2023-04-07 01:15:40 Linux

1.简介2.常用命令#CentOS安装系统状态命令。如果下面的性能指标命令都没有,可以尝试安装yuminstall-ysysstat整机性能指标命令1.top命令#查看系统整体性能命令top-H#-H可以查看某个启动的所有线程process,p指定要查看的进程top-Hp6106loadaverage:三组数字分别代表1分钟、5分钟、15分钟的CPU负载。以单核机为例,load=0.5表示有一半的CPU资源可以处理其他线程请求,load=1表示所有CPU资源都在处理请求,没有剩余资源可以使用,load=2表示CPU已经过载,有两倍的线程等待处理。在多核处理器上,您的平均负载不应高于处理器内核的总数。说明:该命令用于从全局角度查看系统整体性能。2.简化版uptime命令#top命令[root@localhosthome]#uptime22:43:42up1:06,2个用户,loadaverage:0.97,0.74,0.40CPU性能指标命令1,vmstat命令#每两个每秒采样一次,共3个样本[root@localhosthome]#vmstat-n23procs----------memory------------swap-------io------system--------cpu-----rbswpdfreebuffcachesisobiboincsussyidwast200427172211634248800234494564379100100427172211634252000065458649402026540020042717221163425240r0004584c494原理1核CPU的运行队列不超过2个,整个系统的运行队列不超过核总数的2倍b等待资源的进程数,比如等待磁盘I/O,网络I/O等cpu项的意思是us用户进程消耗的cpu时间百分比。us的值高意味着用户进程消耗了大量的cpu时间。如果长时间大于50%,需要优化程序sy内核进程消耗cpu时间的百分比。us+sy的参考值为80%。超过这个阈值说明cpu负载过大。id是空闲cpu百分比。).2.mpstat(MultiprocessorStatistics)命令#查看所有cpu核的信息,每2秒采样一次,共三次,-P{|ALL}表示监控哪个CPU,cpu取mpstat在[0,cpunumber-1]-PALL23说明:查看所有cpu核心信息,它的报告和CPU的一些统计信息,这些信息保存在/proc/stat文件中。在多CP??U系统中,不仅可以查看所有CPU的平均状态信息,还可以查看特定CPU的信息。3.pidstat命令#查看cpu信息,每秒采样1次,共采样5次,-p指定具体进程号pidstat-u15-p1796#查看内存信息,每秒采样1次,共采样5次timesintotal,-p指定具体进程号pidstat-r15-p1796#查看磁盘信息,每秒采样1次,共5个样本,-p指定具体进程号pidstat-d15-p1796说明:查看某个特定进程使用cpu的信息。内存指示命令1、free命令#默认单位kbfree#指定单位mbfree-m#指定单位gbfree-g磁盘指示命令1、df命令#查看磁盘剩余空间df-hIO指示命令1、iostat命令(磁盘IO)#查看磁盘IO状态,每2秒采样一次,共3次,单位为毫秒,值越小越好util在一秒内花费百分之几的时间进行IO操作。当接近100%时,表示磁盘带宽已满,需要优化程序或加磁盘。说明:rkB/s,wkB/s长时间大数据读写绝对不是正常现象;svctm和await的值很接近,说明几乎没有IO等待,磁盘性能不错。如果await的值远高于svctm的值,说明IO等待时间过长,需要优化。一、ifstat命令(网络IO)#查看网络IO状态ifstat1三、服务器异常的分析定位1、JAVA程序CPU占用率过高的分析思路和定位做一个简单的CPU密集型计算的java程序,然后在服务器上运行运行一下,用这个例子来模拟生产环境中CPU占用率过高的场景。#编译javacWhileTrueDemo.java-d#运行示例程序,导致CPU密集计算nohupjavacom.jayway.WhileTrueDemo&具体步骤首先使用整机性能命令top找出CPU占比最佳的进程说明:通过top命令基本可以看出PID为6106的进程CPU占用率过高。使用ps后面的jps进一步定位#使用ps命令进一步查看出问题的java程序[root@localhosthome]#ps-ef|grepJava|grep-vgreproot610614609922:09pts/000:52:15javacom.jayway.WhileTrueDemo#使用java内置命令查看[root@localhosthome]#jps-l6106com.jayway.WhileTrueDemo6238sun.tools.jps.Jps定位特定线程或代码#-m显示所有线程#-ppid进程CPU时间#-o该参数后接用户自定义格式ps-mp6106-oTHREAD,tid,time说明:来自上图,我们可以看到线程6107占用的CPU最多,占用的CPU时间也最多。从它开始继续分析。将需要的线程ID转换为十六进制英文小写格式#将线程号6107转换为十六进制英文小写,结果为:17dbprintf"%x\n"6107java程序使用jstack命令查看java栈信息定位具体问题#进程号为6106,查找问题的线程号为17db(十六进制英文小写)jstack6106|grep17db-C10解释:从上图可以看出,WhileTrueDemo文件中的第八行代码是问题的根源。