进程: jps:当前正在运行中的进程;(基本就是当前服务器你所运行的项目) ps -ef|grep 关键字,和ps -ef|grep 关键字 |grep -v grep :获取相关进程信息; ps -ef:展示所有进程, ps aux:展示所有的进程,比-ef展示更多的信息,ps后面的标签有不同的含义,可以百度, ps aux --sort=-%cpu :按照cpu降序,-降序,+升序 ps aux --sort=-res :按照内存降序,-降序,+升序 ps -a :也是展示进程,ps -T,也是展示线程,ps -aT:展示所有线程;
线程: ps -T -p 进程号:展示进程下的线程 ps -eLf|grep 进程号|grep -v “grep” :展示进程下的线程,没上一种方便;
cpu、内存top分析: top:分析服务器中,当前进程的使用资源; top -H -p 进程号:展示某一进程下的各种线程使用资源 top -H :展示所有线程 top -d 1 -n 1000 :延迟1秒为周期,打印1000次 top命令下:输入u,然后输入用户名,则查看响应的所属用户线程; 输入l,查看个各cpu 的使用情况; 输入p,按照cpu使用率排序
性能分析: 查看线程栈时,看的线程id时16进制的,从top里看的线程id都是10进制的线程id, top查看的十进制线程号,转为16进制id: printf “%x\n” 线程号 :转为16j进制线程id;
top 分析到某一个线程占用资源过多时,查看其当前临时线程栈: jstack 进程号:查看改进程的线程栈 jstack 进程号 > jstack.log :当前文件夹下创建改进程的线程栈文件; jstack 进程号 |grep 16进制线程号 :查看改进程下此线程的线程栈信息;
tat -gcutil 进程号 1000 5 :查看改进程下的线程gc情况 jmap -dump:format=b,file = 文件名dumpname 进程号 :下载堆内存对象, 例如: jmap -dump:format=b,file=/bsts/sign_dump.dat 61; jmap -histo 进程号 :查看改进程下的所有内存对象; jmap -histo:live 进程号 |more :查看堆内存中的对象数目、大小统计直方图,live 表示只统计活对象; jmap 进程号/线程号 :查询此进程/线程的内存占用空间大小; jmap -heap 进程号/线程号 :查看进程号、线程号堆内存的使用情况,包括gc、堆内存、配置等情况
另一篇文章里,写了部分,生成实时dump文件: 非功能测试总览
-- 1.当前服务器tcp查看到下一服务器之间的tcp握手、数据处理、挥手等操作dump分析
注:需要到各服务器去执行,一个服务器节点执行一次
-- 1.1 时刻打印tcpdump信息
tcpdump -i eth0 host 110.110.110.110
-- 1.2tcpdump信息输出到日志文件中
nohup tcpdump -i eth0 -nn 'host 10.200.11.11' > /bsts/xsf/log/tcpdump/tcpdump_2022030801.log 2>&1 &
nohup tcpdump -i eth0 -nn 'port 22601' > /bsts/xsf/log/tcpdump/tcpdump_2022030801.log 2>&1 &
-- 2.查询目标IP服务器,和我服务器的连接数
注:服务端会多一条监听线程(以ip监控或者以端口好监控)
netstat -n |grep "1.1.1.1" |awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"t",state[key]}';
netstat -nat|grep -i "22601" |wc -1
-- 3.最后一种,查询先出dump,
-- 3.1 项目配置javaopts,配置jdk jvm访问登录
--3.2 服务器实时打印
每5秒生成一个先出栈
while true;do echo "hello"$system_date;
jstack -1 1 > /bsts/log/stackdump/xiangmuming_123_$system_date;sleep 5;
system_date=$(date '+%Y%m%d%H%M%S');done
-- 4.生产一个堆内存文件
system_date=$(date '+%Y%m%d%H%M%S');jmap -dump:live,format=b,file=/bats/log/jmapdump/xiangmuming$system_date.hprof 1
|