`

记一次JavaWeb程序的CPU占用过高的分析过程

 
阅读更多

最近负责的一个项目,项目启动一段时间之后CPU占用率一直在90%以上浮动,检查之后没有死循环,十分不解,于是一直在检测,然后找到了问题代码,记录一下找这个问题的过程。

 

服务器配置是阿里云的服务器 E5-2630的单核,内存2GB。操作系统是Windows Server 2008  (x64),Java虚拟机是Tomcat v7.0.

首先是mysql.exe 的cpu占用率过高,首先用show processlist命令找出最频繁的sql语句,然后关键问题在于此数据库中除了主键之外没有其他索引,猜测是因为数据的参数设置问题。于是做了如下调整

1、把MySQL的tmp_table_size加大到200M

2、给用到频率最高的语句的where筛选字段添加索引

 

增加完毕之后MySQL进程的cpu占用明显下降,而且内存稳定在300MB左右,没有明显增加。数据库调整完成。

 

 

然后是java.exe进程占用CPU很高,而且没有死循环,于是下载了微软的process explorer工具对java.exe进行进行监控,找到了其pid号为xxxx,然后查看详情之后发现,其中的两个线程占用的cpu特别高,然后记下这两个线程的tid号。下面想办法找到这两个线程的运行日志。

 

首先,尝试采用jdk自带的jstack抓取日志,但是报错了,像这样

 

C:\Users\Administrator>jstack -l 8736
8736: Insufficient memory or insufficient privileges to attach
The -F option can be used when the target process is not responding


报  Insufficient memory or insufficient privileges to attach
The -F option can be used when the target process is not responding

 

其实,加上-F参数并没有卵用,根本原因是,权限问题。出现这个错误的原因是我的tomcat进程是调用了系统的start service自动启动的,而我的jstack是自己在命令行上面启动的,虽然看上去都是一个administrator用户下的,但是其实tomcat进程并不是。

于是我把tomcat服务停掉,然后手动点击tomcat的bin目录下的startup.bat启动了tomcat,此时再调用

 

jstack -l 3254 >c:\stack.log


命令,将java.exe的进程日志输出到文件,你会发现jstack命令好用了。

 

 

然后用notpad++之类的工具打开log文件,将上面记录的pid转化为16进制,用转化后的线程号在log文件中进行搜索,我运气比较好,直接定位到了具体的方法。发现这是个通用的方法,是按照属性在数据库中查询对应的实体类的方法。

 

方法名字是findByProperties(xxxx, start, limit);

 

一开始没发现该方法的异常,后来发现,同事不小心把start赋值为了0,这样用户每点击一下下一页,其实加载的是从0开始到目的页面的值,这样下去越加载越多。最终导致cpu负载爆表。

 

 

将start改为真实变量之后问题解决。

分享到:
评论
1 楼 neusoft_jerry 2019-03-29  
多谢楼主,mark下!

相关推荐

    javaweb远程性能分析

    这一过程涵盖了服务器响应时间、内存使用、CPU占用率、线程状态等多个关键指标,旨在发现并解决可能导致系统瓶颈或故障的问题。在JavaWeb环境中,性能分析通常涉及到以下几个核心知识点: 1. **JVM监控**:Java...

    借助AOP为JavaWeb应用记录性能数据Java开发Ja

    3. **性能度量指标**:除了执行时间,还可以记录其他指标,如CPU使用率、内存占用等。 4. **异步处理**:对于长时间运行的任务,可以考虑使用异步处理,以避免阻塞主线程。 总之,通过AOP,JavaWeb开发者能够以非...

    JavaWeb并发编程与高并发解决方案.docx

    通过以上内容的详细介绍,我们可以看到,在JavaWeb并发编程与高并发解决方案的设计过程中,不仅需要深入理解并发的基本概念,还需要掌握一系列的技术栈和工具,并且了解底层硬件的运作原理,这样才能构建出高效稳定...

    基于JavaWeb的推荐数据后台管理系统的设计与实现.docx

    - **数据监控**:实时监控系统性能指标,如CPU利用率、内存占用率等。 - **日志管理**:记录系统运行过程中的各种日志信息,便于问题排查。 ### 五、总结 本文详细介绍了基于JavaWeb的推荐数据后台管理系统的设计与...

    JavaWeb服务性能优化方法.pdf

    在进行性能分析时,我们可以监控服务响应时间、CPU利用率、内存消耗等指标,通过压力测试找出性能瓶颈,然后应用相应的优化策略。例如,如果发现响应时间过长,可能是因为数据库查询效率低或并发处理不足,这时可以...

    JavaWeb容器的基本性能.pdf

    8. **CPU和数据量管理**:优化服务器的CPU使用率和控制数据传输量也是提升性能的重要方面。这可能涉及到调整服务器配置,或者在代码级别优化资源消耗。 总之,优化JavaWeb容器的性能涉及多个层次,从代码编写到...

    JAVA性能瓶颈和漏洞检测工具

    3. **CPU性能分析**:通过分析CPU使用率,JProbe可以显示哪个方法消耗了最多的CPU时间,这有助于识别代码中的性能热点,进行针对性的优化。开发者可以通过这些信息调整算法,减少不必要的计算,提升程序运行速度。 ...

    JAVAWeb云平台9个模块完成项目

    5. 资源监控模块:实时监测系统资源使用情况,如CPU、内存、硬盘使用率等,为用户提供可视化的监控界面。 6. 订单管理模块:处理用户的购买、续费、退款等交易行为,与支付系统对接。 7. 日志管理模块:记录系统的...

    JavaMelody JAVA Web项目服务器性能监控工具

    另外,它还能够监控系统级别的指标,如CPU使用率、磁盘空间和网络I/O,这些信息对于系统运维人员来说非常宝贵。 集成JavaMelody到你的JAVA Web项目中十分简便。通常只需要在web.xml配置文件中添加相关的监听器和...

    神经网络aWeb-mas开发笔记

    综上所述,"神经网络aWeb-mas开发笔记"可能涵盖了从构建Web界面到实现神经网络模型训练和部署的全过程,涉及到的技术点广泛且深入,对于理解和实践JavaWeb结合深度学习的开发具有很高的参考价值。如果能详细阅读并...

    java串口读写卡工具

    Java串口读写卡工具是基于Java编程语言利用RXTX库实现的一种应用程序,它能够与串行端口(Serial Port)连接的读卡器进行交互,执行对CPU卡的读取和写入操作。RXTX是一个开源的Java库,提供了一套API,使得Java...

    javamelody-javamelody-core-src-1.68.1.zip

    2. **性能指标**:收集内存使用、CPU占用、数据库查询性能等系统级别的监控数据。 3. **统计分析**:提供图表展示,便于分析应用的性能瓶颈和趋势。 4. **错误跟踪**:记录和显示应用中的错误和异常,帮助开发者...

    java,weblogic和jdk性能调优文档

    - **JVM工具利用**:使用JVisualVM、JProfiler等工具监控和分析JVM行为,包括内存使用、CPU消耗、线程状态等,以便进行针对性的优化。 3. **JDBC性能调优** - **连接池配置**:调整JDBC连接池大小(`min-pool-...

    java,jdk中rt.jar包

    `com.sun.management.OperatingSystemMXBean`是一个接口,它允许程序获取操作系统级别的信息,如CPU利用率、系统负载等。在JavaWeb环境中,由于默认可能不包含这部分内容,因此需要将`rt.jar`引入到项目的特定目录,...

    基于ssm+mysql航空机票预订系统源码数据库.doc

    - **性能监控**:定期检查服务器资源使用情况,如CPU、内存占用率等,及时调整资源配额。 - **备份恢复**:定期备份数据库,以防意外丢失数据时能够快速恢复。 #### 结论 本系统通过SSM框架和MySQL数据库实现了...

    JAVA课程设计报告《新闻发布系统》.docx

    【JavaWeb新闻发布系统】是一个基于Java技术开发的互联网应用程序,旨在提供新闻的发布、管理和用户交互功能。系统设计报告详细阐述了系统的需求、功能、开发工具和运行环境。 **功能需求分析:** 1. **查看新闻...

    JAVA课程设计报告《新闻发布系统》.doc

    【JavaWeb程序设计课程设计——新闻发布系统】 JavaWeb技术在当今的互联网开发中扮演着重要角色,尤其在构建新闻发布系统方面。本课程设计的目标是创建一个新闻发布系统,它结合了内容展示、用户交互和管理功能,以...

    页面置换算法注释版.zip

    这个过程涉及到如何选择最佳的页面进行淘汰,以减少因页面替换引起的缺页率,从而提高系统的整体性能。 1. **基本概念**: - **页面**:程序运行时的逻辑内存单位,通常比物理内存小,且不连续。 - **页框**:...

    Java面试宝典

    - 目的: 自动释放不再使用的对象所占用的内存空间。 - 时机: 当系统空闲或者内存不足时,JVM会启动垃圾回收器来回收不再使用的对象。 13. **对象引用置为null后内存是否立即释放** - 当一个对象的引用被置为null...

Global site tag (gtag.js) - Google Analytics