top -M
top -c
top -p $pid
排序默认从大到小,R反向排序
M:根据内存排序
P:根据CPU使用排序
T:根据使用时间排序
>:向右移动一列排序
<:向左移动一列排序
界面shift+m (根据内存排序)
第一行top
等同命令uptime
1 | cs@debian:~/go$ uptime |
系统当前时间 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 | KiB Mem : 16257204 total, 12933272 free, 1288736 used, 2035196 buff/cache |
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 | cs@debian:~/go$ sudo netstat -anp|grep 12347 |
1 | cs@debian:~/go$ lsof -i:4000 |
列出所有正在运行的java进程
1 | ❯ jps |
参数 说明 -l
输出主类全名或jar路径 -q
只输出LVMID -m
输出JVM启动时传递给main()的参数 -v
输出JVM启动时显示指定的JVM参数
线程
1 | #查看1xxx进程中占用cpu最高的线程 |
内存
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 // 只保留日志个数
}