当前位置: 首页 > news >正文

网站建设动态静态抖音自媒体平台注册入口

网站建设动态静态,抖音自媒体平台注册入口,wordpress+不能发邮件,手机网站后台Java进程CPU高负载排查步骤_java进程cpu使用率高排查_YouluBank的博客-CSDN博客 【问题定位】使用arthas定位CPU高的问题_arthas cpu高_秋装什么的博客-CSDN博客 CPU飙升可能原因 CPU 上下文切换过多。 对于 CPU 来说#xff0c;同一时刻下每个 CPU 核心只能运行-个线程同一时刻下每个 CPU 核心只能运行-个线程如果有多个线程要执行CPU 只能通过上下文切换的方式来执行不同的线程。上下文切换需要做两个事情保存运行线程的执行状态让处于等待中的线程执行这两个过程需要 CPU 执行内核相关指令实现状态保存如果较多的上下文切换会占据大量 CPU 资源从而使得 cpu 无法去执行用户进程中的指令导致响应速度下降。 在 Java 中文件1O、网络 1O、锁等待、线程阻塞等操作都会造成线程阻塞从而触发上下文切换CPU 资源过度消耗也就是在程序中创建了大量的线程或者有线程一直占用CPU 资源无法被释放比如死循环!CPU 利用率过高之后导致应用中的线程无法获得 CPU 的调度从而影响程序的执行效率! 使用命令查找 采用top命令定位进程 登录服务器执行top命令查看CPU占用情况找到进程的pid 很容易发现PID为29706的java进程的CPU飙升到700%多且一直降不下来很显然出现了问题。 使用top -Hp命令定位线程 使用 top -Hp 命令为Java进程的id号查看该Java进程内所有线程的资源占用情况 top -Hp 29706很容易发现多个线程的CPU占用达到了90%多。我们挑选线程号为30309的线程继续分析。 使用jstack命令定位代码 线程号转换为16进制 printf “%x\n” 命令tid指线程的id号将以上10进制的线程号转换为16进制 printf %x\n 30309转换后的结果分别为7665由于导出的线程快照中线程的nid是16进制的而16进制以0x开头所以对应的16进制的线程号nid为0x7665 采用jstack命令导出线程快照 通过使用dk自带命令jstack获取该java进程的线程快照并输入到文件中 jstack -l ./jstack_result.txt 命令为Java进程的id号来获取线程快照结果并输入到指定文件。 jstack -l 29706 ./jstack_result.txt根据线程号定位具体代码 在jstack_result.txt 文件中根据线程好nid搜索对应的线程描述 cat jstack_result.txt |grep -A 100 7665根据搜索结果判断应该是ImageConverter.run()方法中的代码出现问题 也可以直接采用jstack |grep -A 200 来定位具体代码 jstack 29706 |grep -A 200 7665System Clock #28 daemon prio5 os_prio0 tid0x00007efc19e8e800 nid0xae24 waiting on condition [0x00007efbe0d91000]java.lang.Thread.State: TIMED_WAITING (sleeping)at java.lang.Thread.sleep(Native Method)at java.lang.Thread.sleep(Thread.java:340)at java.util.concurrentC.TimeUnit.sleep(TimeUnit.java:386)at com.*.order.Controller.OrderController.detail(OrderController.java:37) //业务代码阻塞点使用工具查找 使用arthas 下载arthas curl -O https://arthas.aliyun.com/arthas-boot.jar1 启动arthas java -jar arthas-boot.jar选择3进行监听我们的应用程序。 模拟CPU高的场景 GetMapping(/cpu)public void cpu() {ThreadPoolExecutor threadPoolExecutor new ThreadPoolExecutor(2, 5, 1000, TimeUnit.SECONDS, new ArrayBlockingQueueRunnable(100));threadPoolExecutor.execute(new Runnable() {public void run() {while (true) {log.info(System.currentTimeMillis() );}}});} dashboard thread -n {number} 按照CPU使用率排序并展示前n个线程 thread [pid] 展示指定线程的线程栈 模拟查看方法调用耗时 RestController Slf4j public class TestController {RequestMapping(/trace)public String trace(int number) throws InterruptedException {number;fun1(number);return Hello World!;}private void fun1(int number) throws InterruptedException {TimeUnit.MILLISECONDS.sleep(10);number;fun2(number);}private void fun2(int number) throws InterruptedException {TimeUnit.MILLISECONDS.sleep(300);number;fun3(number);}private void fun3(int number) throws InterruptedException {TimeUnit.MILLISECONDS.sleep(20);} } trace trace com.charles.web.TestController trace监听TestController的trace方法。 访问wget http://localhost:7077/trace?number1可以看出trace和fun1方法的耗时。 trace命令只会匹配当前的方法以及下一级方法。 trace -E com.charles.web.TestController trace|fun1|fun2|fun3 可以看出fun2方法耗时比较长。 watch watch com.charles.web.TestController fun2 “{params,returnObj}” -x 2 -bwatch方法可以观察到入参此时入参是3。 其它情况 从gc角度出发是否存在大量gc首先确定当前内存消耗情况使用top命令或者查看设备监控管理系统确定内存利用率达97% 总结 CPU飙升问题定位的一般步骤是 1.首先通过top指令查看当前占用CPU较高的进程PID 2.查看当前进程消耗资源的线程PID top -Hp PID 3.通过print命令将线程PID转为16进制根据该16进制值去打印的堆栈日志内查询查看该线程所驻留的方法位置。 4.通过jstack命令查看栈信息定位到线程对应的具体代码。 5.分析代码解决问题。
http://www.w-s-a.com/news/527521/

相关文章:

  • 域名建议网站wordpress 伪静态html
  • 网站风格化设计方案免费模式营销案例
  • 凤翔网站建设农村建设自己的网站首页
  • 怎样用网站做单笔外贸建筑设计公司合作加盟
  • 建网站买的是什么网站开发三层结构
  • wordpress图纸管理网站2345网址导航智能主版
  • 想调用等三方网站数据该怎么做培训课程
  • 高端营销网站建设wordpress咨询
  • 网站搜索框如何做创业怎么做网站
  • 网站手机版管理链接产品推广找哪家公司
  • vuejs 可做网站吗蜘蛛互联网站建设
  • 沈阳网站备案查询17zwd一起做业网站
  • 石家庄大型公司建站广州设计网站培训学校
  • 如何让百度收录中文域名网站wordpress前台管理评论
  • 铁岭 建筑公司网站 中企动力建设佛山app开发公司
  • 网站开发用的电脑深圳专业网站建设服务
  • 内容营销价值wordpress博客优化插件
  • 最优惠的郑州网站建设淘宝网商城
  • 做封面网站企业网站优化服务商
  • 电子商务网站设计是什么蚌埠铁路建设监理公司网站
  • .name后缀的网站做房产网站多少钱
  • 手机上传网站源码网站app封装怎么做
  • 做的网站放在阿里云网站建设投标书范本
  • 做文化传播公司网站wordpress仿简书
  • 什么网站有题目做西宁网站制作哪里好
  • 网站上添加图片的原则优易主机 wordpress
  • 用php做的网站源代码那里有做像美团的网站的
  • 网站建设百科有什么做兼职的网站
  • 创造网站电商网站建设方案道客巴巴
  • 南通设计网站建设wordpress时光轴