线上问题定位常用命令

作者: 阿琦 | 2021-05-29 | 阅读

jstat

  1. jstat -gc pid

可以显示gc的信息,查看gc的次数,及时间。

其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。

2.jstat -gccapacity pid

可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,

如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是perm的内存最大使用量,

PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。

其他的可以根据这个类推,OC是old内纯的占用量。

3.jstat -gcutil pid

统计gc信息统计。

free

free 命令显示系统内存的使用情况:

持续的观察内存的状况,此时可以使用 -s 选项并指定间隔的秒数:

[root@iZj6cces3mggq80hc9a4srZ aqi]# free -h -s 3

      total        used        free      shared  buff/cache   available
Mem:          7.4Gi       4.0Gi       1.9Gi       1.0Mi       1.5Gi       3.1Gi
Swap:            0B          0B          0B

     total        used        free      shared  buff/cache   available
Mem:          7.4Gi       4.0Gi       1.9Gi       1.0Mi       1.5Gi       3.1Gi
Swap:            0B          0B          0B

Mem 行(第二行)是内存的使用情况。

Swap 行(第三行)是交换空间的使用情况。

total 列显示系统总的可用物理内存和交换空间大小。

used 列显示已经被使用的物理内存和交换空间。

free 列显示还有多少物理内存和交换空间可用使用。

shared 列显示被共享使用的物理内存大小。

buff/cache 列显示被 buffer 和 cache 使用的物理内存大小。

available 列显示还可以被应用程序使用的物理内存大小。

df

查看磁盘剩余空间使用df -hl命令:

[root@iZj6cces3mggq80hc9a4srZ aqi]# df -hl
文件系统          容量  已用  可用 已用% 挂载点
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        3.8G     0  3.8G   0% /dev
tmpfs           3.8G     0  3.8G   0% /dev/shm
tmpfs           3.8G  500K  3.8G   1% /run
tmpfs           3.8G     0  3.8G   0% /sys/fs/cgroup
/dev/vda1        40G  8.9G   32G  23% /
tmpfs           763M     0  763M   0% /run/user/0

iostat

tps:该设备每秒的传输次数。

kB_read/s:每秒从设备(drive expressed)读取的数据量;

kB_wrtn/s:每秒向设备(drive expressed)写入的数据量;

kB_read:读取的总数据量;

kB_wrtn:写入的总数量数据量;

[root@iZj6cces3mggq80hc9a4srZ aqi]# iostat
Linux 4.18.0-240.22.1.el8_3.x86_64 (iZj6cces3mggq80hc9a4srZ) 	05/29/2021 	_x86_64_	(2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          21.23    0.01    1.29    0.01    0.00   77.46

Device             tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
vda               1.97        29.02        34.23   20566998   24261464

top

[root@iZj6cces3mggq80hc9a4srZ aqi]# top
top.original - 16:30:36 up 8 days,  4:56,  3 users,  load average: 0.05, 0.03, 0.24
Tasks: 115 total,   1 running, 114 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni, 96.7 id,  0.0 wa,  0.0 hi,  3.3 si,  0.0 st
MiB Mem :   7626.9 total,   1944.1 free,   4101.2 used,   1581.5 buff/cache
MiB Swap:      0.0 total,      0.0 free,      0.0 used.   3225.9 avail Mem

    PID USER      PR  NI    VIRT    RES    SHR S  %CPU  %MEM     TIME+ COMMAND
      1 root      20   0  179552   7400   4248 S   0.0   0.1   0:41.08 systemd
      2 root      20   0       0      0      0 S   0.0   0.0   0:00.11 kthreadd
      3 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_gp
      4 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 rcu_par_gp
      6 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 kworker/0:0H-kblockd
      9 root       0 -20       0      0      0 I   0.0   0.0   0:00.00 mm_percpu_wq

  1. 统计部分:

重点关注参数: 第2行 Tasks, 总进程数,运行的进行数,睡眠的进程数 停止的进程数 僵尸进程数

第3行 %Cpu(s) us 用户空间CPU占用率 sy ; 内核空间CPU 占用率

第4行 Mem 行 物理内存总量 空闲物理内存 已使用的物理内存 内核缓存使用量

  1. 进程信息

各进程参数,重点关注列 PIDCOMMAD%Cpu%MEM

  1. 导出dump

jmap -dump:live,format=b,file=/tmp/xxxx.hprof pid

jprofiler 打开进行分析

  1. 把Xms和Xmx设置为相同,这样可以减少GC后重新分配带来的性能开销
  2. jvm参数,可以通过增大XX:MaxPretenuringThreshold参数值,让对象更有可能被Minor GC回收掉,但同时得用XX:PretenureSizeThreshold这个参数限制存放在新生代的最大的对象是多少,防止对象在新生区,占用空间大,会由于空间不足而导致很多小对象进入到老年区,最后可以增大Survivor区的内存使用率-XX:TargetSurvivorRatio这个参数(默认为50%),降低进入老年代的频率。

  3. arthas 这个挺好用的

参考

jstat命令详解: https://blog.csdn.net/zhaozheng7758/article/details/8623549

Java后端线上问题排查常用命令收藏: https://mp.weixin.qq.com/s/7cInYxzRfQ-c7wKQBlbFXg#2c139b8c-5d9c-fbb2-fd3c-619172a46344

jvm 内存泄漏现象和处理方案: https://blog.csdn.net/it_czz/article/details/105857845

如何根据DUMP文件分析线上问题: https://www.cnblogs.com/linus-tan/p/9328004.html

JVM日志参数十全大补丸: https://mp.weixin.qq.com/s/XZFEgf1ZS7gNt7lku3TF4g


版权声明:本文由 阿琦 在 2021年05月29日发表。本文采用CC BY-NC-SA 4.0许可协议,非商业转载请注明出处,不得用于商业目的。
文章题目及链接:《线上问题定位常用命令》




  相关文章:


留言区:

TOP