高手是如何定位内存问题的代码位置的

本文介绍如何在Linux环境下利用jstack工具定位Java程序中导致CPU利用率高的线程。通过一个简单的示例程序,演示了从发现高负载进程到具体线程的整个排查流程。

java程序CPU利用率高怎么办

请jstack神器来帮忙

 

本文介绍Linux环境下使用jstack定位问题的秘笈

工具/原料

  • Linux
  • java
  • thread
  • jstack
  • top
  • ps
  • printf
  • Runnable

方法/步骤

  1. 1 一个CPU密集型线程的demo:

    package chapter1;

    public class FindJavaThreadInTaskManager {    

        public static void main(String[] args) {        

                Thread thread = new Thread(new Worker());        

                thread.start();    

        }   

     static class Worker implements Runnable {        

            @Override        

            public void run() {            

                while (true) {                

                    System.out.println("Thread Name:" + Thread.currentThread().getName());           

                 }       

             }   

         }

    }

    高手是怎么使用jstack精确找到异常代码的
  2. 2将上述代码打成Jar。

    在Linux上执行上述代码

     

     

    命令:

    java -jar JavaStudy.jar

    高手是怎么使用jstack精确找到异常代码的
  3. 3    找到CPU利用率持续比较高的进程,获取进程号,此处PID为3036 

    命令:

    top

    高手是怎么使用jstack精确找到异常代码的
  4. 4 找到上述进程中,CPU利用率比较高的线程号TID(十进制数),此处为3046

    命令:

    ps p 3036 -L -o pcpu,pmem,pid,tid,time,tname,cmd

    高手是怎么使用jstack精确找到异常代码的
  5. 5  将获取的线程号(十进制数)转换成十六进制,此处为0x b46

    命令:

    printf "%x\n"  3046

    高手是怎么使用jstack精确找到异常代码的
  6. 6 查看进程PID为3036中

    nid为0xb46的线程信息。

    命令:

    jstack -l 3036

    高手是怎么使用jstack精确找到异常代码的
  7. 总结:

    可以看到jstack命令的输出结果是相当准确的:

    显示耗CPU比较高的代码与实际情况相同,都是第13行。

    放心的用吧。

    Enjoy youself!

    高手是怎么使用jstack精确找到异常代码的
 
 

转载于:https://www.cnblogs.com/yepei/p/7080513.html

<think>好的,我现在需要处理用户关于代码问题的帮助请求。用户提到遇到了找不到mfc110u.dll的错误,还引用了其他几个引用链接,包括Vue项目的问题Java开发问题等。首先,我需要确认用户的具体问题是什么,但用户的信息比较分散,可能需要逐一分析每个引用中的问题,然后提供相应的解决方案。 首先,针对引用[1]中的mfc110u.dll缺失问题,这是Windows系统中常见的动态链接库错误,通常与Visual C++ Redistributable有关。解决方案应该是重新安装对应的运行库,或者修复系统文件。接下来,引用[2]提到Vue项目中使用babel-polyfill来解决兼容性问题,这可能涉及ES6+特性的支持。引用[3]建议使用事件查看器分析系统崩溃原因,这是一个通用的故障排除方法。引用[4]讨论了前端请求时机问题,建议在created生命周期钩子中处理数据以避免闪屏,并提到加入token到请求头。引用[5]涉及Java开发中的内存设置和JDK版本问题,需要调整IDEA的配置或更换正确的JDK版本。 用户可能希望得到这些问题的解决方案,但他们的具体问题描述不够明确,需要进一步澄清。不过根据用户最后的请求“我想寻求解决代码问题的帮助 请问遇到代码问题需要解决方案”,可能需要一个通用的解决代码问题的步骤,同时结合各个引用中的具体案例。 接下来,我需要按照用户提供的系统级指令来组织回答,确保使用正确的中文和LaTeX格式,生成相关问题,并在引用末尾添加标识。同时,回答需要结构清晰,分步骤解决用户可能遇到的问题,结合每个引用中的案例给出具体方案,比如处理DLL缺失、Vue兼容性、Java配置等。 需要注意的是,用户可能没有明确说明具体遇到了哪个问题,因此通用的解决步骤会更合适,然后针对每个引用中的不同问题提供对应的解决方案。例如,先分析错误信息,再针对性解决,如安装运行库、添加polyfill、调整生命周期钩子、配置环境变量等。 最后,生成的相关问题需要覆盖各个引用中的主题,帮助用户进一步探索可能遇到的问题。例如,如何安装Visual C++运行库,如何配置babel-polyfill,如何分析系统日志,如何处理前端请求时机,如何调整Java内存设置等。</think>遇到代码问题时,建议按照以下结构化步骤解决: ### 一、错误分析与解决方案 1. **识别错误类型** - 若为依赖缺失(如$mfc110u.dll$),需检查运行环境是否完整。例如: ```powershell # 重新安装Visual C++ 2012 Redistributable choco install vcredist2012 ``` 该问题通常由系统组件未安装导致[^1] 2. **环境配置验证** - 前端项目需检查$babel-polyfill$等依赖: ```javascript // 安装并引入polyfill npm install --save @babel/polyfill import '@babel/polyfill'; ``` 可解决ES6+语法兼容性问题[^2] 3. **生命周期管理** - Vue项目中数据加载时机错误会导致界面闪屏: ```javascript created() { this.fetchData(); // 替代mounted中的请求 } ``` 结合$axios拦截器$添加请求头token[^4] ### 二、开发环境调试 1. **日志分析工具** - 使用Windows事件查看器定位系统级错误: ```bash eventvwr.msc # 打开事件查看器 ``` 可诊断插件冲突等问题[^3] 2. **IDE配置优化** - Java项目需调整构建堆大小: ```xml <!-- idea.properties配置示例 --> shared.build.process.heap.size=2048 ``` 同时确保JDK版本与环境匹配[^5] ### 三、典型问题速查表 | 问题类型 | 解决方案 | 验证方法 | |-------------------|--------------------------------|------------------------| | DLL文件缺失 | 安装对应版本VC++运行库 | 系统路径检查 | | ES6兼容性问题 | 引入babel-polyfill | 浏览器控制台错误检测 | | 请求时序异常 | 调整Vue生命周期钩子 | 网络请求时序分析 | | 构建内存溢出 | 增加JVM堆空间配置 | IDE日志监控 |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值