
方法一
第一步:使用
top命令,然后按shift+p按照CPU排序
找到占用CPU过高的进程的pid
第二步:使用
top -H -p [进程id]
找到进程中消耗资源最高的线程的id
第三步:使用
echo 'obase=16;[线程id]' | bc或者printf "%x\n" [线程id]
将线程id转换为16进制(字母要小写)
bc是linux的计算器命令
第四步:执行
jstack [进程id] |grep -A 10 [线程id的16进制]”
查看线程状态信息
方法二
第一步:使用
top命令,然后按shift+p按照CPU排序
找到占用CPU过高的进程
第二步:使用
ps -mp pid -o THREAD,tid,time | sort -rn
获取线程信息,并找到占用CPU高的线程
第三步:使用
echo 'obase=16;[线程id]' | bc或者printf "%x\n" [线程id]
将需要的线程ID转换为16进制格式
第四步:使用
jstack pid |grep tid -A 30 [线程id的16进制]
打印线程的堆栈信息
案例分析
场景描述
生产环境下JAVA进程高CPU占用故障排查
解决过程
1、根据top命令,发现PID为2633的Java进程占用CPU高达300%,出现故障。
2、找到该进程后,如何定位具体线程或代码呢,首先显示线程列表,并按照CPU占用高的线程排序:
1[root@localhost ~]# ps -mp 2633 -o THREAD,tid,time | sort -rn
显示结果如下:
找到了耗时最高的线程(TID)3626,占用CPU时间有12分钟了!
3、将需要的线程TID转换为16进制格式
12[root@localhost ~]# printf "%x\n" 3626e18
4、最后使用jstack命令打印出该进程下面的此线程的堆栈信息:
1[root@localhost ~]# jstack 2633 |grep "e18" -A 30
相比故障的解决而言,发现故障也同等的重要!市场上的大多数监控软件都能实现服务器负载的实时观测,比如:Zabbix、Nagios、阿里云监控(针对云服务器)等。但是当中大部分的软件都需要运维同学主动去设置规则或者检测才能发现问题,如何被动的也能收到告警呢?
推荐大家一个实用的运维软件——王教授,对于业务部署在阿里云上的用户,只需绑定需要监控的只读AcessKey,即可将云上资源的告警信息及时通知给对应的团队成员。
化主动为被动的方式,一方面减轻了运维工程师的工作,另一方面也减小了运维漏看或者忽略告警的情况发生。
不同配置搭载的CPU型号不同,均搭载的Intel至强处理器,这里介绍其中一款Intel Xeon E5-2430的参数信息:
插槽类型: LGA 1356;
主频: 2200MHz;
核心数量: 六核心;
线程数量: 12;
总线频率: 1333MHz;
L3缓存: 15MB;
工作功率: 95W;
CPU架构: 64位。
第一步:收集Xshell登陆信息登陆阿里云管理中心,点击“云服务器ECS”,点击“实例”,看到服务器信息页面,点击“管理”(如图)在此信息中查看公网IP地址
第二步:进入命令界面
打开 Xshell 4 ,点击“用户身份验证”,输入主机(公网IP),‘确定’后输入用户名和密码连接(如图)
第三步:更新并安装yum源
#yum check-update 检查可更新的所有软件包
#yum update 下载更新系统已经安装的软件包
#yum install vsftpd -y 成功安装yum源
第四步:创建FTP用户
#service vsftpd start 启动vsftpd
#useradd -p /alidata/>登陆阿里云下载文件:>
1、运行我们的App
2、进入app主画面
3、在画面底部找到 控制台 选项
4、进入控制台画面,在画面中 我的云产品-> 云服务器ESC,选择云服务器ESC
5、在实例中可以看到我们的一台实例
6、选择实例就可以进入 监控图表 画面
7、选择一个图表资料可以查看图标数据
8、在左上角还可以根据 时间端来查看服务器状态
1使用浏览器插件来录制脚本,可以借助阿里云的插件来实现2导出为jmx文件
3调整jmx文件的步骤,按照接口的名称一一对应去重新命名每一步的业务
4调试jmx文件直到可以正常运行并查看实际环境,确保根据运行的jmx文件正确的生成/变更了业务项
5根据性能的需求配置线程数、启动时间、运行时间等配置项并保存
6在jmeter安装路径的bin目录下,文件夹地址栏输入cmd,使用命令行模式运行并生成测试报告
jmeter -n -t X:\apache-jmeter-541\xxxjmx -l testinitfile -e -o /output
后续每次使用该命令需要先删除testinitfile文件并且清空output文件夹
7也可以不使用jmeter运行,使用阿里云PTS压测平台创建jmeter压测场景,导入录制的jmx文件,调试脚本,检查关键步骤的接口返回,确认返回是成功的,不能以200的状态码来判定,调试直到可以正常运行并查看实际环境,正确的生成/变更了业务项,然后配置压测场景,保存配置开始压测
8运行脚本的时候登录系统主机检查服务器的内存、CPU等资源占用情况
9压测数据量较大,测试完成后清除掉测试产生的数据
9jmeter可以根据需要安装测试报告汉化模板,阿里云PTS压测可以查看或导出压测报告
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)