美文网首页
linux 命令

linux 命令

作者: JackSpeed | 来源:发表于2021-11-05 10:33 被阅读0次

    top

    top主要关注CPU、MEM、load average的数值,其中load average后面的三个值表示过去1、5、15分钟系统的平均负载情况,如果三个值的平均值大于0.6则系统负载稍微偏高。按数字1可以切换CPU;uptime命令可作为精简版的top命令

    vmstat

    vmstat主要用于查CPU的使用情况。一般使用vmstat -n 2 3这表示没两秒采样一次,一共采样3次。主要的观察项为procs和CPU
    procs
    r :表示runtime,运行和等待CPU时间片的进程数,原则上1核CPU的运行队列不要超过2,整个系统的运行队列不能超过总核数的2倍,超过了则代表系统压力过大
    b:表示block(阻塞),等待资源的进行数,比如正在等待磁盘IO、网络IO等
    CPU
    us:用户进程消耗CPU时间百分比,us值高则表示用户进程消耗CPU时间多,如果长期大于50%,需要优化程序
    sy:内核进行消耗的CPU时间百分比,us+sy的参考值为80%,如果大于80%说明可能存在CPU不足的情况
    id:表示处于空间的CPU百分比,即CPU空闲率,正常情况下越大越好
    wa:系统等待IO的CPU时间白笨比
    st:来自于一个虚拟机偷取的CPU时间的百分比

    mpstat

    mpstat表示查看所有CPU(多核)的运行信息。mpstat -P all 2表示每两秒采集一次,结果中的iddle表示空闲率

    pidstat

    pidstat表示查看指定PID进程的CPU使用情况,pidstat -u 2 -p 2321表示每隔2秒采样一次进程id为2231的CPU使用情况

    image.png

    free

    free查看系统运行内存的大小
    free -h
    free -m

    一般内存使用超过70%则需要增加内存,或者减少系统内存暂占率 image.png

    查看制定进程暂用内存命令 pidstat -r 2 -p 28347表示每个两秒采样一次内存使用情况

    image.png

    df

    df查看磁盘使用情况 df -h

    iostat

    iostat查看磁盘IO情况,iostat -xdk 2 3每隔两秒采集ICI,采样三次

    image.png

    rkB/s:每秒读取数据量KB
    wkB/s:每秒写入数据量KB
    svctm:IO请求的平均服务时间,单位毫秒
    await:IO请求中的平均等待时间,单位毫秒:值越小性能越好;
    rkB/s和wkB/s:rkB/s、wkB/s根据系统应用不同会有不同的值,但有规律遵循:长期、超大数据读写肯定不正常,需要优化程序读取
    %util:一秒中有百分之几的时间用于IO操作。接近100%时表示磁盘IO满负载,需要优化程序或者增加磁盘容量

    如果svctm的值与await的值接近,表示几乎没有IO等待,磁盘性能好;如果await值远大于svctm的值,则表示IO队列等待时间太长,需要优化程序或者更好磁盘

    查看指定进程磁盘IO情况pidstat -d 2 -p 28347表示查看进程28347的磁盘IO情况,每个两秒采样一次

    image.png

    ifstat

    查看网络负载情况

    程序CPU占用过高排查思路

    1. top命令查看哪个进程占用高
      top查看cpu占用高的进程

    2. 根据top得到高的进程之后,通过ps -ef |grep xxx查询xxx进程的详情
      根据进程id查看:ps -ef |grep 22231
      根据应用名模糊查:ps -ef |grep java
      根据应用名模糊查:ps -ef |grep java |grep -v grep
      查询java进程命令: jps -l

    3. 根据进程id查看进程里线程的CPU占用情况,也就可以定位到出问题的线程ps -mp 进程id -o THREAD,tid,time
      -m:显示所有线程;
      -p:进程使用CPU的时间;
      -o:该参数后面的是云呼自定义的格式;
      THREAD:线程;
      tid:线程id——10进制;
      time:为时间
      例子:ps -mp 22231 -o THREAD,tid,time得到进程22231里面所有线程的CPU占用情况;

    4. 根据第三步得到的线程id,用printf "%x\n"把十进制的线程id转成16进制的线程id(英文小写格式,%x表示转成16进制,\n表示换行),再通过jstack查看线程详情,可查出线程里对应java代码的位置,可针对此结果进行分析;jstack 进程id |grep tid -A50tid为16进制程id;-A60位输出50行
      例如:printf "%x\n" 22233 得到16进制的线程id:56d9
      例如:jstack 22231 |grep 56d9 -A50得到线程56d9高占用CPU的代码

    相关文章

      网友评论

          本文标题:linux 命令

          本文链接:https://www.haomeiwen.com/subject/uxsrmltx.html