业务逻辑先理清
vmstat
查进程,内存,
r 运行CPU和等待CPU
b block在io进程的个数
r b 可以看做 队列长度 根据时间平均就是 load average 队列
uptime 快速看到r b 进程的状态,这个只有vmstat的process部分
dmesg 看系统日志 /var/log/message
大意是内存不够用,系统干掉了,total-vm 是java的内存,后面的rss是物理内存
perf top -g 看cup使用的热力图
top 命令
ni 是cup 执行的优先级
wa 等待
hi 硬中断
si 软中断 线程等待
面试卷中卷
oom 内存溢出
load average 平均负载
cpu
第一使用率 user
第二队列,(中断,软中断,上下文切换)
java堆 是使用的固定内存大小
栈,就会大于堆,同时栈使用的是物理内存,消耗多java工具是看不到的
在启动线程与活动线程中不一致,观察
网络
1.看使用率
2.半使用队列,和全连接队列
3.发送队列和接收队列
队列,发多少,收多少(),
针对2. 这个tcp 的半发送等待连接队列与全连接队列,还有丢弃的,连接负载就会丢弃,dropped
针对3. 里面的send-q是要发送给远程主机,但是还没确认的byte数(发的问题)
recv-q 就是收到数据还在缓存中,没给进程读取,也是CPU处理不过来的导致的时间拆分,链路拆分
netstat -nlpt(查找网络入口)
java
iftop 看网络带宽是找到端口,
netstat 通过端口找到进程,
lsof 进程 找到文件
top -Hp 通过进程,到线程
拿到线程PID要转换16进制
jstack 线程--代码
pstack 线程到代码【C C++】
文件监控
inotify 文件的操作过程监控