当前位置: 首页 > 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.hkea.cn/news/14317058/

相关文章:

  • 成都网站建设培训网站建设公司落寞
  • 西安网站推广哪家稳定自己怎做网站后台
  • 台州市建设厅网站wordpress目录列表
  • 阿里云部署网站怎么开通网站平台
  • 集群网站开发怎么给网站做绿标
  • 北京做网站公司东莞cms建站模板
  • 图片拼接做网站背景重庆好的网站制作公司哪家好
  • 万网空间上传网站兰州网站维护
  • 全国二级建造师注册信息查询网站简述网络营销的主要方法
  • 安卓app做网站外壳网站备案服务商查询
  • 非物质文化遗产网站怎么做做网站需要几个人分工
  • 网站制作新手教程视频seo优化网站推广
  • 做静态网站有什么建议更新带动器
  • 自己做网站价格亚马逊跨境电商简介
  • asp网站模板源码营销网站的渠道构成基本包括
  • 建湖做网站找哪家好机器人网站建设规划书
  • 凡客诚品网站推广WordPress文章生成图片
  • 常州建设银行网站首页清明节网页设计素材
  • ps怎样做网站首页图如何自己开发手机app
  • 互动营销成功案例自己的网站怎么做关键词优化
  • 齐齐哈尔哪里做网站手机网站对企业用户的好处
  • 陕西省建设厅三类人员报名网站哪些软件可以做网页
  • vue做的小网站网络推广培训吧
  • 网站建设验收汇报wordpress+手机应用
  • app界面素材宁波网络seo哪家有名
  • 网站地址地图怎么做手机端网站的区别
  • 白云手机网站建设网络运维工程师求职信
  • 莱阳网站建设安卓程序开发
  • 网站开发与维护视频教程谁有永久免费的服务器
  • 学校建设网站的作用云seo关键词排名优化软件