运维常用命令

Posted by BenderFly on February 22, 2020

cpu负载高

一般是会根据15分钟那个load 平均值判断。 Load高也许是因为在进行cpu密集型的计算,Load高只是代表需要运行的队列累计过多了。但队列中的任务实际可能是耗Cpu的,也可能是耗i/0及其他因素的。 并非系统load高一定是性能有问题。 Load只是表象,不是实质。增加CPU个别情况下会临时看到Load下降,但治标不治本 Load average 高的情况下如何鉴别系统瓶颈: CPU不足,还是io不够快造成或是内存不足?

vmstat, sar, iostat

[root@tecmint ~]# vmstat 

procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
 r  b   swpd   free  inact active   si   so    bi    bo   in   cs us sy id wa st
 1  0      0 810420  97380  70628    0    0   115     4   89   79  1  6 90  3  0

procs r 列表示运行和等待cpu时间片的进程数,如果长期大于1,说明cpu不足,需要增加cpu。 b 列表示在等待资源的进程数,比如正在等待I/O、或者内存交换等。

cpu us 列显示了用户方式下所花费 CPU 时间的百分比。us的值比较高时,说明用户进程消耗的cpu时间多,但是如果长期大于50%,需要考虑优化用户的程序。 sy 列显示了内核进程所花费的cpu时间的百分比。这里us + sy的参考值为80%,如果us+sy 大于 80%说明可能存在CPU不足。 wa 列显示了IO等待所占用的CPU时间的百分比。这里wa的参考值为30%,如果wa超过30%,说明IO等待严重,这可能是磁盘大量随机访问造成的,也可能磁盘或者磁盘访问控制器的带宽瓶颈造成的(主要是块操作)。 id 列显示了cpu处在空闲状态的时间百分比

memory swpd 切换到内存交换区的内存数量(k表示)。如果swpd的值不为0,或者比较大,比如超过了100m,只要si、so的值长期为0,系统性能还是正常 free 当前的空闲页面列表中内存数量(k表示) buff 作为buffer cache的内存数量,一般对块设备的读写才需要缓冲。 cache: 作为page cache的内存数量,一般作为文件系统的cache,如果cache较大,说明用到cache的文件较多,如果此时IO中bi比较小,说明文件系统效率比较好。

swap si – Swaped in every second from disk in Kilo Bytes. so 同so,为output

IO bi 从块设备读入数据的总量(读磁盘)(每秒kb)。 bo 块设备写入数据的总量(写磁盘)(每秒kb) 这里我们设置的bi+bo参考值为1000,如果超过1000,而且wa值较大应该考虑均衡磁盘负载,可以结合iostat输出来分析。

sudo yum install sysstat
#每2秒一次,执行6次
vmstat  2 6
#会加上时间字段
vmstat  -t 2 6
#-S requires k, K, m or M (default is KiB)
vmstat -S M 1 5

si – Swaped in every second from disk in Kilo Bytes.

iostat

[root@tecmint ~]# iostat

Linux 2.6.32-279.el6.i686 (tecmint.com)         09/03/2012      _i686_  (1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.12    0.01    1.54    2.08    0.00   96.24

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda               3.59       161.02        13.48    1086002      90882
dm-0              5.76       159.71        13.47    1077154      90864
dm-1              0.05         0.38         0.00       2576          0
#-c只显示cpu,-d只显示disk,-p只显示sda,-h human readable
iostat -c
iostat -d
iostat -p sda
iostat -x sda sdb 2 6

top

top命令的c参数来查看具体的每个java进程对应的是什么程序 在centos linux 上查看进程占用cpu过高 查看哪个进程程消耗最高

top 
shift+h

查找最消耗cpu的java线程 jps 找到java进程PID 命令:

ps -mp pid -o THREAD,tid,time   或者  ps -Lfp pid

端口

/etc/services 常用端口 netstat -p PID and name -a 显示listening和non-listening -n 显示ip -u udp -t tcp -l listening 查看进程占用的端口

netstat -nap | grep 126012
tcp6       0      0 :::8001                 :::*                    LISTEN      126012/java         
tcp6       0      0 10.26.20.68:42674       10.26.20.63:3306        ESTABLISHED 126012/java         
tcp6       0      0 10.26.20.68:42676       10.26.20.63:3306        ESTABLISHED 126012/java         
tcp6       0      0 10.26.20.68:42024       10.26.20.65:8761        ESTABLISHED 126012/java         
tcp6       0      0 10.26.20.68:42672       10.26.20.63:3306        ESTABLISHED 126012/java         
unix  2      [ ]         STREAM     CONNECTED     5329929  126012/java     

进程126012 占用端口8001;

查看某个端口是否被占用

[root@localhost ~]# netstat -unltp|grep 8001
tcp6       0      0 :::8001                 :::*                    LISTEN      126012/java   

8001端口被进程126012占用;

lsof

1.列出所有打开的文件:

lsof

备注: 如果不加任何参数,就会打开所有被打开的文件,建议加上一下参数来具体定位

  1. 查看谁正在使用某个文件
    lsof   /filepath/file
    

    3.递归查看某个目录的文件信息

    lsof +D /filepath/filepath2/
    

    备注: 使用了+D,对应目录下的所有子目录和文件都会被列出

  2. 比使用+D选项,遍历查看某个目录的所有文件信息的方法
    lsof | grep ‘/filepath/filepath2/’
    
  3. 列出某个用户打开的文件信息
    lsof  -u username
    

    备注: -u 选项,u其实是user的缩写

  4. 列出多个程序多打开的文件信息
    lsof -c mysql -c apache
    
  5. 列出某个用户以及某个程序所打开的文件信息
    lsof -u test -c mysql
    
  6. 列出多个进程号对应的文件信息
    lsof -p 123,456,789
    
  7. 列出所有tcp 网络连接信息
    lsof  -i tcp
    lsof -i :3306
    lsof -i tcp:80
    

参考