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
备注: 如果不加任何参数,就会打开所有被打开的文件,建议加上一下参数来具体定位
- 查看谁正在使用某个文件
lsof /filepath/file
3.递归查看某个目录的文件信息
lsof +D /filepath/filepath2/
备注: 使用了+D,对应目录下的所有子目录和文件都会被列出
- 比使用+D选项,遍历查看某个目录的所有文件信息的方法
lsof | grep ‘/filepath/filepath2/’
- 列出某个用户打开的文件信息
lsof -u username
备注: -u 选项,u其实是user的缩写
- 列出多个程序多打开的文件信息
lsof -c mysql -c apache
- 列出某个用户以及某个程序所打开的文件信息
lsof -u test -c mysql
- 列出多个进程号对应的文件信息
lsof -p 123,456,789
- 列出所有tcp 网络连接信息
lsof -i tcp lsof -i :3306 lsof -i tcp:80