Urd https://www.e-learn.cn/tag/urd zh-hans 知识点051-判断linux系统状态命令汇总 https://www.e-learn.cn/topic/823519 <span>知识点051-判断linux系统状态命令汇总</span> <span><span lang="" about="/user/79" typeof="schema:Person" property="schema:name" datatype="">你离开我真会死。</span></span> <span>2019-11-30 18:00:55</span> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"><div class="content" id="articleContent"> <span id="OSC_h1_1"></span> <h1>系统状态信息查看</h1> <span id="OSC_h2_2"></span> <h2>top (服务器进程,负载,cpu,内存情况)</h2> <table><tbody><tr><th>参数</th> <th>解析</th> </tr><tr><td>load average: 1.15, 1.42, 1.44</td> <td>1,5,15分钟负载情况,一般参数为cpu内核数的1-1.5倍以上应关注</td> </tr><tr><td>1 running, 559 sleeping,   0 stopped,   0 zombie </td> <td>正在运行、睡眠、停止、僵尸进程的数量,关注僵尸进程的数量</td> </tr><tr><td>%sys</td> <td>系统占用CPU百分比</td> </tr><tr><td>id</td> <td>CPU空闲率,越接近100%越好</td> </tr><tr><td>top -c</td> <td>完整的进程命令显示</td> </tr><tr><td>top -bn1</td> <td>打印当前的top 进程</td> </tr><tr><td>数字1</td> <td>显示各个cpu的情况及个数</td> </tr><tr><td>shift +m</td> <td>内存占用排行</td> </tr><tr><td>shift +p</td> <td>cpu占用排行</td> </tr><tr><td>top -bn1</td> <td>bn1显示所有进程信息,top -n 1 只显示一屏信息,供管道调用</td> </tr></tbody></table><span id="OSC_h2_3"></span> <h2>vmstat(进程,磁盘,cpu,内存情况)</h2> <table><tbody><tr><th>参数</th> <th>解析</th> </tr><tr><td>r</td> <td> <p>表示多少个进程分配给cpu</p> <p>一般和cpu个数一起参考,超过CPU的个数就有瓶颈</p> </td> </tr><tr><td>b</td> <td>阻塞的进程,进程阻塞</td> </tr><tr><td>swpd</td> <td>虚拟内存已使用的大小,如果大于0,表示机器物理内存不足,可能需要机器内存不足</td> </tr><tr><td>free</td> <td>空闲的空间</td> </tr><tr><td>buff</td> <td>存储系统中目录,权限等缓存</td> </tr><tr><td>cache</td> <td>用来记忆我们打开的文件,给文件做缓冲</td> </tr><tr><td>si</td> <td>每秒从磁盘读入虚拟内存的大小,如果这个值大于0,表示物理内存不够用或者内存泄露</td> </tr><tr><td>so</td> <td>每秒虚拟内存写入磁盘的大小,如果这个值大于0,同上</td> </tr><tr><td>bi</td> <td>设备每秒接收的块数量,这里的块设备是指系统上所有的磁盘和其他块设备,默认块大小是1024byte</td> </tr><tr><td>bo</td> <td>块设备每秒发送的块数量,例如我们读取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO过于频繁,需要调整</td> </tr><tr><td>in</td> <td>每秒CPU的中断次数,包括时间中断</td> </tr><tr><td>cs</td> <td>每秒上下文切换次数,例如我们调用系统函数,就要进行上下文切换,线程的切换,也要进程上下文切换,这个值要越小越好</td> </tr><tr><td>us</td> <td>用户CPU时间</td> </tr><tr><td>sy</td> <td>系统CPU时间</td> </tr><tr><td>id</td> <td>空闲 CPU时间 id+us +sy =100</td> </tr><tr><td>wt</td> <td>io等待磁盘写进去</td> </tr></tbody></table><span id="OSC_h2_4"></span> <h2>mpstat(单个CPU情况)</h2> <table><tbody><tr><th>参数</th> <th>解析</th> </tr><tr><td>mpstat -P ALL</td> <td>查看所有CPU的平均情况</td> </tr><tr><td>mpstat -P 2</td> <td>查看指定CPU的情况</td> </tr></tbody></table><span id="OSC_h2_5"></span> <h2>pidstat(单个进程的情况)</h2> <p>yum install -y sysstat  </p> <table><tbody><tr><th>参数</th> <th>解析</th> </tr><tr><td>pidstat -d -p 3679</td> <td> <p>kB_rd/s - 任务从硬盘上的读取速度(kb)<br /> kB_wr/s - 任务向硬盘中的写入速度(kb)<br /> kB_ccwr/s - 任务写入磁盘被取消的速率(kb)</p> </td> </tr><tr><td>pidstat -r -p 3679</td> <td> <p>minflt/s - 从内存中加载数据时每秒出现的小的错误的数目,这些不要求从磁盘载入内存页面。<br /> majflt/s - 从内存中加载数据时每秒出现的较大错误的数目,这些要求从磁盘载入内存页面。<br /> VSZ - 虚拟容量:整个进程的虚拟内存使用(kb)<br /> RSS - 长期内存使用:任务的不可交换物理内存的使用量(kb)</p> </td> </tr><tr><td>pidstat -r 2 5</td> <td>该命令比较容易定为出问题的进程</td> </tr><tr><td>pidstat -urd -h</td> <td>统计所有数据一起打印出来</td> </tr><tr><td>pidstat -w -p 3679</td> <td> <p>Cswch/s - 每秒主动任务上下文切换数量<br /> Nvcswch/s - 每秒被动任务上下文切换数量</p> </td> </tr></tbody></table><p><br /> iostat (磁盘情况)</p> <table><tbody><tr><th>参数</th> <th>解析</th> </tr><tr><td>iostat -d -k 2 5</td> <td> <p>-d 表示显示设备磁盘的使用状态</p> <p>-k 表示强制使用kilobytes为单位,如果是-m ,则是M</p> <p>2 每2秒刷新</p> <p>6 刷新6次</p> </td> </tr><tr><td>tps</td> <td>一次I/O请求</td> </tr><tr><td>kB_read/s</td> <td>每秒从设备(drive expressed)读取的数据量</td> </tr><tr><td>kB_wrtn/s</td> <td>每秒向设备(drive expressed)写入的数据量</td> </tr><tr><td>kB_wrtn</td> <td>写入的总数量数据量</td> </tr><tr><td>kB_wrtn</td> <td>写入的总数量数据量</td> </tr><tr><td>iostat -c 2 5</td> <td>类似mpstat -P ALL 命令,查看cpu 统计信息</td> </tr><tr><td>iostat -d -x -k 2 5</td> <td>多了-x 参数,用于显示磁盘io的更多信息</td> </tr></tbody></table><span id="OSC_h2_6"></span> <h2>free(内存情况)</h2> <table><tbody><tr><th>参数</th> <th>解析</th> </tr><tr><td>Mem</td> <td>内存的使用情况</td> </tr><tr><td>Swap</td> <td>交换空间</td> </tr><tr><td>total</td> <td>系统总共可用的物理内存和交换空间大小</td> </tr><tr><td>used</td> <td>已使用的物理内存和交换空间</td> </tr><tr><td>free</td> <td>还有多少物理内存和交换空间</td> </tr><tr><td>shared</td> <td>被共享的物理内存大小</td> </tr><tr><td>buff/cache</td> <td>显示被buffer和cache使用的物理内存</td> </tr><tr><td>available</td> <td>availble = free +buffer +cache</td> </tr></tbody></table><span id="OSC_h2_7"></span> <h2>sar (找出系统的瓶颈)</h2> <p>怀疑CPU存在瓶颈,可用 sar -u 和 sar -q 等来查看<br /> 怀疑内存存在瓶颈,可用sar -B、sar -r 和 sar -W 等来查看<br /> 怀疑I/O存在瓶颈,可用 sar -b、sar -u 和 sar -d 等来查看</p> <table><tbody><tr><th>参数</th> <th>解析</th> </tr><tr><td> <p>sar -f /var/log/sa/saxx</p> <p>(追溯系统中xx天的系统运行情况)</p> </td> <td> <p>指定时间段s(start),e(end)</p> <p>sar -f /var/log/sa/saxx -s 00:00:00 -e 23:00:00 -r</p> </td> </tr><tr><td> <p>sar -u</p> <p>(CPU资源,磁盘IO)</p> </td> <td> <p>%user - 用户模式下消耗的CPU时间的比例<br /> %nice - 通过nice改变了进程调度优先级的进程,在用户模式下消耗的CPU时间的比例<br /> %system - 系统模式下消耗的CPU时间的比例<br /> %iowait - CPU等待磁盘I/O导致空闲状态消耗的时间比例<br /> %steal - 利用Xen等操作系统虚拟化技术,等待其它虚拟CPU计算占用的时间比例<br /> %idle - CPU空闲时间比例</p> </td> </tr><tr><td> <p>sar -q</p> <p>(系统平均负载)</p> </td> <td> <p>runq-sz - 运行队列的长度(等待运行的进程数)<br /> plist-sz - 进程列表中进程(processes)和线程(threads)的数量</p> </td> </tr><tr><td> <p>sar -r</p> <p>(内存和交换空间)</p> </td> <td> <p>kbmemfree - 这个值和free命令中的free值基本一致,所以它不包括buffer和cache的空间<br /> kbmemused - 这个值和free命令中的used值基本一致,所以它包括buffer和cache的空间<br /> %memused - 物理内存使用率,这个值是kbmemused和内存总量(不包括swap)的一个百分比<br /> kbbuffers和kbcached - 这两个值就是free命令中的buffer和cache<br /> kbcommit - 保证当前系统所需要的内存,即为了确保不溢出而需要的内存(RAM+swap)<br /> %commit - 这个值是kbcommit与内存总量(包括swap)的一个百分比</p> </td> </tr><tr><td> <p>sar -W</p> <p>(查看页面交换发生状况)</p> </td> <td> <p>pswpin/s - 每秒系统换入的交换页面(swap page)数量<br /> pswpout/s - 每秒系统换出的交换页面(swap page)数量</p> </td> </tr><tr><td> <p>sar -v 10 3</p> <p>(每10秒采样一次,连续采样3次,观察核心表状态)</p> </td> <td> <p> </p> <p>dentunusd - 目录高速缓存中未被使用的条目数量<br /> file-nr - 文件句柄(file handle)的使用数量<br /> inode-nr - 索引节点句柄(inode handle)的使用数量<br /> pty-nr - 使用的pty数量</p> <p> </p> </td> </tr><tr><td> <p>sar -n SOCK 1 3</p> <p>(针对socket进行汇报)</p> <p> </p> </td> <td> <p>totsck - 被使用的socket的总数目<br /> tcpsck - 当前正在被使用于TCP的socket数目<br /> udpsck - 当前正在被使用于UDP的socket数目<br /> rawsck - 当前正在被使用于RAW的socket数目<br /> ip-frag - 当前的IP分片的数目</p> </td> </tr><tr><td> <p>sar -n EDEV 1 3</p> <p>(网络数据包使用情况,EDEV失败的情况,DEV正确的情况)</p> </td> <td> <p>rxerr/s - 每秒钟接收到的损坏的包的数目<br /> txerr/s - 当发送包时,每秒钟发生的错误数<br /> coll/s - 当发送包时,每秒钟发生的冲撞(collisions)数(这个是在半双工模式下才有)<br /> rxdrop/s - 由于缓冲区满,网络设备接收端,每秒钟丢掉的网络包的数目<br /> txdrop/s - 由于缓冲区满,网络设备发送端,每秒钟丢掉的网络包的数目<br /> txcarr/s - 当发送数据包时,每秒钟载波错误发生的次数<br /> rxfram/s - 在接收数据包时,每秒钟发生的帧对齐错误的次数<br /> rxfifo/s - 在接收数据包时,每秒钟缓冲区溢出错误发生的次数<br /> txfifo/s - 在发送数据包时,每秒钟缓冲区溢出错误发生的次数</p> </td> </tr></tbody></table><span id="OSC_h2_8"></span> <h2>iftop(网卡流量)</h2> <table><tbody><tr><th>参数</th> <th>解析</th> </tr><tr><td>iftop -F 10.0.0.2/32</td> <td>查看某个ip的出入网卡的流量</td> </tr><tr><td> <p>L</p> </td> <td>流量刻度显示</td> </tr><tr><td> <pre>依次输入3 → t → B</pre> </td> <td> <p>3 根据最近40s统计排序</p> <p>t 发送和接收合并一行</p> <p>B 分别查看最近2s 10s 和40s的统计</p> </td> </tr><tr><td>&lt;=</td> <td>接收数据</td> </tr><tr><td>=&gt;</td> <td>发送数据</td> </tr></tbody></table><span id="OSC_h2_9"></span> <h2>netstat(端口相关)</h2> <table><tbody><tr><th>参数</th> <th>解析</th> </tr><tr><td>netstat -lntp</td> <td>服务器中运行的端口情况</td> </tr><tr><td>netstat -ie</td> <td>输出和ifconfig信息一样</td> </tr><tr><td>netstat -s</td> <td> <p>列出所有端口的统计信息</p> <p>加上(-t和-u)对应tcp和udp</p> </td> </tr><tr><td>netstat -nat |awk '{print $6}'|sort|uniq -c|sort -rn</td> <td>网络连接状态汇总</td> </tr></tbody></table><span id="OSC_h2_10"></span> <h2>lsof(当前系统打开文件的工具)</h2> <table><tbody><tr><th>参数</th> <th>解析</th> </tr><tr><td>lsof</td> <td>列出系统中打开的文件</td> </tr><tr><td>lsof -u xxxx -c nginx</td> <td>列出xxxx用户的nginx进程打开文件的信息</td> </tr><tr><td>lsof -p xxx</td> <td>进程号xxx打开文件的信息</td> </tr><tr><td>lsof -i :80</td> <td>打开80端口的信息</td> </tr><tr><td>lsof +d /usr/local</td> <td>显示目录下被进程开启的文件</td> </tr><tr><td>lsof +D /usr/local</td> <td>同上,目录下的目录会被找</td> </tr><tr><td>lsof -g gid</td> <td>显示进程归属gid的进程情况</td> </tr></tbody></table><span id="OSC_h2_11"></span> <h2>find(查找文件)</h2> <table><tbody><tr><th>参数</th> <th>解析</th> </tr><tr><td>find /data/logs/xxx/ -type f -mtime +3 -iname "*.log"</td> <td>找出3天前/data/logs/xxx/ 目录中为*.log 的文件</td> </tr><tr><td>find /data/logs/xxx/ -type f -iname "*.log" -exec rm -f {}\;</td> <td>找出3天前/data/logs/xxx/ 目录中为*.log 的文件并删除</td> </tr></tbody></table></div><div class="alert alert-warning" role="alert"><p>来源:<code>https://my.oschina.net/u/3635512/blog/3113648</code></p></div></div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field--label">标签</div> <div class="field--items"> <div class="field--item"><a href="/tag/sysstat" hreflang="zh-hans">sysstat</a></div> <div class="field--item"><a href="/tag/urd" hreflang="zh-hans">Urd</a></div> <div class="field--item"><a href="/tag/linux" hreflang="zh-hans">Linux</a></div> <div class="field--item"><a href="/tag/iftop" hreflang="zh-hans">Iftop</a></div> <div class="field--item"><a href="/tag/runq" hreflang="zh-hans">runq</a></div> </div> </div> Sat, 30 Nov 2019 10:00:55 +0000 你离开我真会死。 823519 at https://www.e-learn.cn