top排查服务器

top -M

top -c

top -p $pid

排序默认从大到小,R反向排序

M:根据内存排序

P:根据CPU使用排序

T:根据使用时间排序

>:向右移动一列排序

<:向左移动一列排序

界面shift+m (根据内存排序)

第一行top

等同命令uptime

1
2
cs@debian:~/go$ uptime
22:00:22 up 8:59, 1 user, load average: 0.13, 0.32, 0.36

系统当前时间 up 系统到目前为止运行的时间,

当前系统的登陆用户数量,

load average后面的三个数字分别表示距离现在一分钟,五分钟,十五分钟的负载情况

load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了

第二行 Tasks

1
Tasks: 241 total,   1 running, 240 sleeping,   0 stopped,   0 zombie

tasks表示任务(进程),214则表示现在有241个进程,

running 其中处于运行中的有1个,

sleeping 240个在休眠(挂起),

stopped 停止的进程数为0,

zombie 僵尸的进程数为0个

第三行%Cpu

1
%Cpu(s):  3.6 us,  0.6 sy,  0.0 ni, 95.8 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st

us——用户空间(user)占用cpu的百分比
sy——内核空间(system)占用cpu的百分比
ni——改变过优先级(niced)的进程占用cpu的百分比
id——空闲(idolt)CPU百分比
wa——IO等待(wait)占用cpu的百分比
hi——IRQ 硬中断(Hardware)占用cpu的百分比
si——软中断(software)占用cpu的百分比
st——被hypervisor偷去的时间

第四五行 kib内存

1
2
KiB Mem : 16257204 total, 12933272 free,  1288736 used,  2035196 buff/cache
KiB Swap: 7812092 total, 7812092 free, 0 used. 14425716 avail Mem

Mem:物理内存总量(16G)
free: 空闲内存总量(1G)
used: 使用中的内存总量
buff/cache: 用作内核缓存的内存量

Swap: 交换区总量
free:空闲交换区总量
used: 使用的交换区总量
avail Mem:表示可用于进程下一次分配的物理内存数量,这个大小一般比free大一点,因为除了free的空间外,系统还能立即释放出一些空间来

第七行 进程信息区

1
PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND  

PID — 进程id
USER — 进程所有者
PR — 进程优先级
NI — nice值。负值表示高优先级,正值表示低优先级
VIRT — 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
RES — 常驻内存,进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
SHR — 共享内存大小,单位kb
S — 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
%CPU — 上次更新到现在的CPU时间占用百分比
%MEM — 进程使用的物理内存百分比
TIME+ — 进程使用的CPU时间总计,单位1/100秒
COMMAND — 进程名称(命令名/命令行)

其他

1
2
cs@debian:~/go$ sudo netstat -anp|grep 12347
tcp 0 0 0.0.0.0:4000 0.0.0.0:* LISTEN 12347/hexo
1
2
3
4
5
6
cs@debian:~/go$ lsof -i:4000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
hexo 12347 cs 21u IPv4 324187 0t0 TCP *:4000 (LISTEN)
cs@debian:~/go$ ps -ef|grep 12347
cs 12347 1640 0 21:56 pts/2 00:00:03 hexo
cs 13306 1622 0 22:23 pts/0 00:00:00 grep 12347

列出所有正在运行的java进程

1
2
3
❯ jps
198374 Jps
197561 target-manager.jar
参数 说明
-l 输出主类全名或jar路径
-q 只输出LVMID
-m 输出JVM启动时传递给main()的参数
-v 输出JVM启动时显示指定的JVM参数

线程

1
2
3
4
5
6
7
8
9
10
#查看1xxx进程中占用cpu最高的线程
❯ top -Hp $pid
....

#将线程tid转为16进制
❯ printf '%x\n' $tid
0x4295

# 查进程号,0x4295为最耗CPU线程的十六进制
jstack $pid | grep '0x4295' -C10 --color

内存

1
jmap -heap 197561

GC的频率

使用jstat -gcutil 197561 5000命令查看GC的频率。

O代表老年代占用率,FGC是FullGC次数,FGCT是fullGC时间,可以看出在频繁FullGC但是老年代有资源一直释放不掉

备份

top -b -n 1 | grep ^top -A 50 >> toplog.txt

logrotate

logrotate.conf
/etc/logrotate.conf

weekly // 默认每一周执行一次rotate轮转工作 rotate 4 // 保留多少个日志文件(轮转几次).默认保留四个.就是指定日志文件删除之前轮转的次数,0 指没有备份 create // 自动创建新的日志文件,新的日志文件具有和原来的文件相同的权限;因为日志被改名,因此要创建一个新的来继续存储之前的日志 dateext // 这个参数很重要!就是切割后的日志文件以当前日期为格式结尾,如xxx.log-20131216这样。如果注释掉,切割出来是按数字递增,即前面说的xxx.log-1这种格式 compress // 是否通过gzip压缩转储以后的日志文件,如xxx.log-20131216.gz;如果不需要压缩,注释掉就行
include /etc/logrotate.d # 把/etc/logrotate.d/目录中的所有文件都加载进来
top
/etc/logrotate.d/top
/var/log/sys/toplog.txt {
               // 仅针对/var/log/sys/toplog.txt文件进行日志切割,设定的参数
monthly                    // 每月一次切割,取代默认的一周 ,hourly 小时
minsize 1M                 // 文件大小超过 1M 后才会切割
create 0664 root cs      // 指定新建的日志文件权限以及所属用户和组
rotate 12                   // 只保留日志个数
}  
点击打赏
文章目录
  1. 1. 第一行top
  2. 2. 第二行 Tasks
  3. 3. 第三行%Cpu
  4. 4. 第四五行 kib内存
  5. 5. 第七行 进程信息区
  6. 6. 其他
    1. 6.1. 线程
    2. 6.2. 内存
    3. 6.3. GC的频率
  7. 7. 备份
    1. 7.1. logrotate
载入天数...载入时分秒... ,