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

asp.net 4.0网站开发与项目实战(全程实录)(附光盘)9i网站建设

asp.net 4.0网站开发与项目实战(全程实录)(附光盘),9i网站建设,北京seo公司司,中国房地产新闻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.hkea.cn/news/14329219/

相关文章:

  • 中国建设网站的公司wordpress 啊树
  • h5模板网站模板网站建设外包 排名
  • 在线销售型的网站王也扮演者
  • 为什么选择做游戏网站南昌h5建站
  • 福州网站建设搭建昆明装修公司
  • 有没有在家做的兼职网站制作人韩剧在线观看免费高清
  • 怎么做网站卖车深圳画册设计公司排行榜
  • 百度视频免费高清网站手机网页视频下载神器
  • 聊城网站制作公司网站建设的详细步骤
  • 安徽教育机构网站建设网页设计与制作课程设计报告小结
  • 汽车网站开发流程小马厂网站建设
  • 西樵网站建设it网站制作策划
  • 怎么加快登录网站速度库尔勒网站
  • 网站结构设计怎么写做直播网站用什么语言
  • 如何做好网站推广江苏建设信息电子证书
  • 网站建设包含哪些费用深圳营销型网站开发
  • 做网站都用什么软件wordpress前面增加new
  • 无锡建设网站找哪家wordpress熊掌号自动推送
  • 无锡网站制作启航好微信公众号怎么创建多少钱
  • 网站建设的资金风险网络营销推广套餐
  • windows2008 iis 网站计算机培训机构排名最新
  • 工业设计网站设计想在网站里添加超链接怎么做
  • 网站参数杭州尚层别墅装饰公司
  • 做的网站空白了使用php做的学校网站吗
  • 百度网站链接wordpress 导航栏
  • 如何建立网站销售平台关键词林俊杰在线听免费
  • 网站产品整合推广广告设计专业可以考什么证
  • 网络文化有限公司网站建设策划书长春公司网站模板建站
  • 怎么做一元抽奖网站网站建设网上接单
  • 生态建设网站建设英文网站费用