# Linux
命令之 top
top - 整机性能查看
主要看 load average, CPU, MEN
三部分
load average
表示系统负载,即任务队列的平均长度。 三个数值分别为1
分钟、5
分钟、15
分钟前到现在的平均值。load average
: 如果这个数除以逻辑CPU
的数量,结果高于5
的时候就表明系统在超负荷运转了。
uptime - 系统性能命令的精简版
# Linux
之 cpu
查看 vmstat
( mac
中为 vm_stat
)
procs
r
:运行和等待的CPU
时间片的进程数,原则上1
核的CPU
的运行队列不要超过2
,整个系统的运行队列不超过总核数的 2 倍,否则代表系统压力过大,我们看蘑菇博客测试服务器,能发现都超过了2
,说明现在压力过大b
:等待资源的进程数,比如正在等待磁盘I/O
、网络I/O
等
cpu
us
:用户进程消耗CPU
时间百分比,us
值高,用户进程消耗CPU
时间多,如果长期大于50%
,优化程序
sy
:内核进程消耗的 CPU 时间百分比
us + sy
参考值为80%
,如果us + sy
大于80%
,说明可能存在CPU
不足,从上面的图片可以看出,us + sy
还没有超过百分 80,因此说明蘑菇博客的CPU
消耗不是很高
id
:处于空闲的CPU
百分比
wa
:系统等待IO
的CPU
时间百分比
st
:来自于一个虚拟机偷取的CPU
时间比
# Linux
之 cpu
查看 pidstat
( Mac
中没有)
查看看所有 cpu
核信息
1 | mpstat -P ALL 2 |
每个进程使用 cpu
的用量分解信息
1 | pidstat -u 1 -p 进程编号 |
# Linux
之内存查看 free
和 pidstat
( Mac
中没有)
应用程序可用内存数
经验值
应用程序可用内存 l 系统物理内存 > 70%
内存充足
应用程序可用内存 / 系统物理内存 < 20%
内存不足,需要增加内存
20%
< 应用程序可用内存 / 系统物理内存 < 70%
内存基本够用
m/g
:兆 / 吉
查看额外
1 | pidstat -p 进程号 -r 采样间隔秒数 |
# Linux
之硬盘查看 df
查看磁盘剩余空间数
# Linux
之磁盘 IO
查看 iostat
和 pidstat
磁盘 I/O
性能评估
mac
:
linux
:
磁盘块设备分布
rkB/s
每秒读取数据量kB;wkB/s
每秒写入数据量kB
;svctm lO
请求的平均服务时间,单位毫秒;await l/O
请求的平均等待时间,单位毫秒;值越小,性能越好;util
一秒中有百分几的时间用于I/O
操作。接近100%
时,表示磁盘带宽跑满,需要优化程序或者增加磁盘;rkB/s、wkB/s
根据系统应用不同会有不同的值,但有规律遵循:长期、超大数据读写,肯定不正常,需要优化程序读取。svctm
的值与await
的值很接近,表示几乎没有 IO 等待,磁盘性能好。- 如果
await
的值远高于svctm
的值,则表示IO
队列等待太长,需要优化程序或更换更快磁盘。
# Linux
之网络 IO
查看 ifstat
默认本地没有,下载 ifstat
1 | wget http://gael.roualland.free.fr/lifstat/ifstat-1.1.tar.gz |
查看网络 IO
各个网卡的 in、out
观察网络负载情况程序
网络读写是否正常
- 程序网络
I/O
优化 - 增加网络
I/O
带宽
# Linux
查看物理 CPU
个数、核数、逻辑 CPU
个数
1 | # 总核数 = 物理CPU个数 X 每颗物理CPU的核数 |
查看服务器信息指令
1 | #查看CPU信息(型号) |
# CPU
占用过高的定位分析思路
结合 Linux
和 JDK
命令一块分析
案例步骤
- 先用
top
命令找出CPU
占比最高的
ps -ef
或者jps
进一步定位,得知是一个怎么样的一个后台程序作搞屎棍
- 定位到具体线程或者代码
ps -mp
进程-o THREAD,tid,time
-m
显示所有的线程-p pid
进程使用cpu
的时间-o
该参数后是用户自定义格式
- 将需要的线程
ID
转换为16
进制格式(英文小写格式),命令printf %x 172
将172
转换为十六进制 jstack 进程ID | grep tid
(16
进制线程ID
小写英文)-A60
ps - process status
-A Display information about other users’ processes, including those without controlling terminals.
-e Identical to -A.
-f Display the uid, pid, parent pid, recent CPU usage, process start time, controlling tty, elapsed CPU usage, and the associated command. If the -u option is also used, display the user name rather then the numeric uid. When -o or -O is used to add to the display following -f, the command field is not truncated as severely as it is in other formats.
ps -ef 中的 e、f 是什么含义
对于 JDK
自带的 JVM
监控和性能分析工具用过哪些?一般你是怎么用的?link
# GitHub
骚操作之 awesome
搜索
- 公式:
awesome
关键字:awesome
系列,一般用来收集学习、工具、书籍类相关的项目 - 搜索优秀的
redis
相关的项目,包括框架,教程等awesome redis
# GitHub
骚操作之 #L
数字
一行:地址后面紧跟 #L10
https://github.com/abc/abc/pom.xml#L13
多行:地址后面紧跟 #Lx - #Ln
https://github.com/moxi624/abc/abc/pom.xml#L13-L30