监控服务器系统负载,内存以及实战java线程耗时长

监控服务器系统负载,内存以及实战java线程耗时长

查看cup load average

  • uptime
  • top
  • cat /proc/loadavg

前两个命令可以看到load average有三个值

load average: 0.06, 0.12. 0.13

这三个值分别代表 1分钟,5分钟,15分钟的cpu load情况。(如果5,15分钟负载持续高需要密切关注原因)

load average: 一段时间内处于可运行状态和不可中断状态的进程平均数量。(可运行分为正在运行进程
和正在等待cpu的进程,状态为R;不可中断则是它正在做某些工作不能被中断比如等待磁盘Io等,其状态为D)

理解cup load的含义

一个cpu的每个核心同时只能处理一个进程,所以单核CPU的最大负载是1,2核CPU最大负载是2。所以单核cpu负载100%,在2核CPU负载只是50%。

所以我们看load average时,需要结合CPU的核心数来得出cpu的负载是否高。

查看cpu数核心数

总核数 = 物理CPU个数 * 每个物理CPU的核心数
总逻辑CPU数 = 物理Cpu个数 * 每个物理CPU的核心数* 超线程数

 
 // 查看物理个数 
 cat /proc/cpuinfo| grep "physical id"| sort |uniq |wc -l
 
 
 // 查看每个物理CPU中的核心数
 cat /proc/cpuinfo| grep "cpu cores"| sort |uniq |wc -l


 // 查看逻辑CPU的个数(云服务器我们一般说的几核)
 cat /proc/cpuinfo| grep "processor"| sort |uniq |wc -l
 

//查看系统核数
grep ^processor /proc/cpuinfo | wc -l

cpu使用率

cpu使用率表示进程在占用CPU时是否使用了CPU的计算能力。假如某个进程占用了CPU一分钟,其中15秒在等待磁盘,45秒使用CPU处理从磁盘得到的数据,那么这一分钟CPU的使用率就是45/60 = 75%,但是CPU的负载这一分钟是1。

CPU负载高利用率低: 表示等待的任务进程太多,可能有些进程僵死了。
CPU利用高负载低: 表示执行的任务少,但是任务的执行时间长,有可能是程序有问题,或者任务的计算比较重。

top命令

top - 10:56:14 up 358 days, 16:19,  4 users,  load average: 0.59, 0.76, 0.81
Tasks: 195 total,   1 running, 193 sleeping,   1 stopped,   0 zombie
%Cpu(s):  0.4 us,  1.0 sy,  0.0 ni, 97.8 id,  0.2 wa,  0.0 hi,  0.3 si,  0.3 st
KiB Mem : 32780560 total,   356628 free,  5764344 used, 26659588 buff/cache
KiB Swap:        0 total,        0 free,        0 used. 24893124 avail Mem 

  • top - 10:56:14 [系统当前时间]

  • up 358 days, 16:19 [系统已经持续运行358天16小时19分钟]

  • 4 users [4个当前登陆用户]

  • load average: 0.59, 0.76, 0.81 [系统负载,1分钟0.59,5分钟0.76,15分钟0.81]

  • Tasks: 195 total [总进程数]

  • 1 running [1个正在运行的进程]

  • 193 sleeping [193个睡眠的进程]

  • 1 stopped [一个停止的进程]

  • 0 zombie [0个冻结的进程]

  • %Cpu(s): 0.4 us [用户空间占用cpu百分比]

  • 1.0 sy [内核空间占CPU百分比]

  • 0.0 ni [用户进程空间改变过优先级的进程占用CPU百分比]

  • 97.8 id [空闲cpu百分比]

  • 0.2 wa [等待输入输出的CPU时间百分比]

  • 0.0 hi [硬中断占CPU的百分比]

  • 0.3 si [软中断占CPU百分比]

  • 0.3 st [虚拟CPU占CPU的百分比]

  • KiB Mem : 32780560 total [物理内存总量]

  • 356628 free [空闲内存总量]

  • 5764344 used [使用的物理内存总量]

  • 26659588 buff/cache [用作内核缓存的内存量]

  • KiB Swap: 0 total [交换区总量]

  • 0 free [空闲交换区总量]

  • 0 used [使用的交换区总量]

  • 24893124 avail Mem [缓冲的交换区总量]

 PID   USER   PR  NI    VIRT    RES    SHR   S  %CPU  %MEM   TIME+    COMMAND     
 19326 root   20  0     9.9g   4.8g    7740  S  2.0  15.4   4472:47   java         

  • PID [进程id]
  • USER [启动进程的用户]
  • PR [进程的调度优先级]
  • NI [进程的优先级,越小优先级越高]
  • VIRT [进程使用的虚拟内存]
  • RES [驻留内存大小,驻留内存是任务使用的非交换物理内存大小]
  • SHR [进程使用的共享内存]
  • S [进程的状态, D: 不可中断的睡眠态 R: 运行态 S: 睡眠态 T: 被跟踪或已停止 Z: 僵尸态]
  • %CPU [自从上一次更新时到现在任务所使用的CPU时间百分比]
  • %MEM [进程使用的可用物理内存的百分比]
  • TIME+ [任务启动后到现在所使用的全部CPU时间 单位秒]
  • COMMAND [运行进程所使用的命令]

iostat

命令解释

iostat(i/o statistics) 对整个系统的磁盘操作活动进行监视。

如果没有这个命令安装:

 yum install sysstat
 

执行命令输出

[root]# iostat

Linux 3.10.0-514.26.2.el7.x86_64 (SZC-L0073138)         06/05/2020      _x86_64_        (8 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           7.97    0.00    1.11    0.94    0.00   89.98

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sdb              37.04       413.24      1840.76 28168131487 125472363526
sdc              48.71      1056.95      1883.60 72045187756 128392365997
sda               9.61       214.57        82.09 14625692844 5595728123
dm-0              3.74       165.84         5.23 11304534785  356496815
dm-1             18.78        40.90        34.24 2787646788 2333633548
dm-2             64.57      1056.95      1883.60 72045186116 128392365997
dm-3             53.26       413.24      1840.76 28168129831 125472363526
dm-4              0.00         0.00         0.00      21823     262492
dm-5              1.58         6.07        41.12  413599842 2802705388
dm-6              0.30         1.63         1.50  111166136  102557567
sdd              56.20       431.84      1723.21 29435883909 117459864144
dm-7            105.49       431.84      1723.21 29435879685 117459864104

  • avg-cpu: %user [用户空间占CPU的时间百分比]

  • %nice [ cpu处于带nice(用户进程空间改变过优先级的进程)的时间百分比]

  • %system [CPU处于系统模式下的时间百分比]

  • %iowait [CPUd等待输入输出完成时间的百分比] [过高表示磁盘io存在瓶颈]

  • %steal [虚拟cpu的无意识等待时间百分比]

  • %idle [CPU空闲时间百分比]

  • tps [该设备每秒的传输次数]

  • kB_read/s [每秒从设备读取的数据量]

  • kB_wrtn/s [每秒从设备写入的数据量]

  • kB_read [读取的总数据量]

  • kB_wrtn [写入的总数据量]

Device: 系统挂载设备情况

lsblk : 显示Linxu的列表块设备(也就是所挂载的磁盘),可以看到sdb这些

	NAME                  MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
	sda                     8:0    0   60G  0 disk 
	|-sda1                  8:1    0 1000M  0 part /boot
	-sda2                  8:2    0   59G  0 part 
 	|-VolGroup00-LVroot 253:0    0 19.7G  0 lvm  /
  	|-VolGroup00-LVswap 253:1    0  3.9G  0 lvm  [SWAP]
  	|-VolGroup00-LVhome 253:4    0  500M  0 lvm  /home
  	|-VolGroup00-LVtmp  253:5    0   10G  0 lvm  /tmp
 	-VolGroup00-LVvar  253:6    0   25G  0 lvm  /var
	sdb                     8:16   0  500G  0 disk 
	-VolGroup1-LVdata1   253:3    0  500G  0 lvm  /data2
	sdc                     8:32   0  500G  0 disk 
	-VolGroup2-LVdata2   253:2    0  500G  0 lvm  /data1
	sdd                     8:48   0 1000G  0 disk 
	-vg03-LVdata3        253:7    0 1000G  0 lvm  /data3
	sr0                    11:0    1 1024M  0 rom  

查看dm-0这种

dmsetup info /dev/dm-0 : 查看挂载的dm-0背后的磁盘

Name:              VolGroup00-LVroot
State:             ACTIVE
Read Ahead:        8192
Tables present:    LIVE
Open count:        1
Event number:      0
Major, minor:      253, 0
Number of targets: 1
UUID: LVM-aZ9CubesFTEDMStyzoLz15X6Ow5AM0dMY7x52EGdsOx

lvdisplay : 查看磁盘逻辑卷详情

--- Logical volume ---
  LV Path                /dev/VolGroup00/LVroot
  LV Name                LVroot
  VG Name                VolGroup00
  LV UUID                Y7x52E-GdsO-x50y-hAtq-RbE1-QFg1-b2gu2c
  LV Write Access        read/write
  LV Creation host, time localhost, 2017-09-08 11:25:06 +0800
  LV Status              available
  # open                 1
  LV Size                19.65 GiB
  Current LE             5031
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     8192
  Block device           253:0

dstat

dstat和iostat的功能基本是相同的,dstat的目标是替换iostat这种监控工具。

----total-cpu-usage---- -dsk/total- -net/total- ---paging-- ---system--
usr sys idl wai hiq siq| read  writ| recv  send|  in   out | int   csw 
  8   1  90   1   0   0|2117k 5530k|   0     0 |  41k   34k| 962  2684 
 13   0  86   0   0   0|   0     0 |1426B 1451B|   0     0 |2232  2142 

  • system int [系统中断次数]
  • system csw [上下文切换次数]
  • total-cpu-usage [cpu统计]
  • dsk/total [磁盘统计]
  • net/total [网络流量统计]
  • paging [系统的分页活动,分页指的是一种内存管理技术用于查找系统
    场景,一个较大的分页表明系统正在使用大量的交换空间,或者说内存非常分散
    ,大多数情况下你都希望看到in(换入)和out(换出)的值是0 0 ]

排查java线程负载异常的堆栈

  1. top 命令找到java的进程

  2. top -p javaPid -H

    可以看到进程下的线程id,以及cpu,内存使用情况
    使用jstack 打印进程的堆栈信息(在输出的信息中搜索上面占用高的线程id)
    (这里最好多打印几次日志,一般3~5次,执行jstack命令打印的堆栈信息是瞬时的)

  3. jstack javaPid > javaLog1.txt

3.1 jstat -gc pid (顺便输出一下GC的信息)
输出一次虚拟机的新生代,老年代内存情况,以及YGC以及FullGC的情况。

jstat -gc pid 1s 10
间隔1S输出10次堆信息

  1. 重启应用保证线上服务持续可用

参考

https://www.cnblogs.com/rexcheny/p/9382396.html

https://www.cnblogs.com/xrq730/p/11041741.html

https://blog.csdn.net/u013565163/article/details/87310957

https://wangchujiang.com/linux-command/c/top.html

https://www.cnblogs.com/mushang1hao/p/10767062.html

https://www.cnblogs.com/ftl1012/p/iostat.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值