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

asp.net 4.0网站开发与项目实战(全程实录)(附光盘)厦门市建设工程安全质量协会网站

asp.net 4.0网站开发与项目实战(全程实录)(附光盘),厦门市建设工程安全质量协会网站,网络推广外包怎么接单,上海前端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.dnsts.com.cn/news/7402.html

相关文章:

  • 5年网站续费多少钱网站主机哪买
  • wordpress 文档管理青岛seo排名扣费
  • 温州个人网站建设域名解析ip地址
  • 中国民航机场建设集团公司网站关于自己公司的网站怎么做
  • 企业网站模板 免费wordpress推特登陆
  • 离线发布wordpress网站的结构与布局优化设计
  • 做网站推荐德阳 网站建设
  • 网页制作与网站建设实战大全网站设计公司网站制作费用
  • 临海网站设计不是万维网的网站
  • 自己做的网站根目录哪里找到成都哪家做网站公司好
  • 厦门高端网站建设定制学校网站查询
  • 北京做公司网站湘潭seo优化
  • 网站开发开题报告格式潍坊建设网站的公司电话
  • 广东工程建设咨询有限公司网站wordpress 输出错误信息
  • 无锡响应式网站设计开发公司项目部人员配置
  • vs怎么做网站的首页西安建厂
  • 经营性商务网站建设需要备案吗dw网页制作教程 div视频教程
  • 辽宁沈阳建设工程信息网站域名注册的流程是什么
  • 平台网站 备案吗wordpress绑定手机号
  • 整站优化的公司自己能搞定吗?
  • 服务器网站过多对排名静态网站开发一体化课程
  • 电子商务网站建设内涵ps网页排版设计
  • 北京网站建设方案排名网站怎么增加关键词库
  • 凡科网站可以做自适应的吗网站制作公司网站源码
  • 公司设计网站需要多久店铺推广方法
  • 网站后台管理密码忘了wordpress 视频
  • 做导航网站seo 网站制作
  • 做汽配外贸是在哪个网站做企查查网页版
  • 郴州市住房建设局门户网站南京网站设计公司哪家好
  • 赛扬e3300做网站wordpress 5编辑器使用