假设生产环境出现CPU占用过高,请谈谈你的分析思路和定位

假设生产环境出现CPU占用过高,请谈谈你的分析思路和定位

目的

找出引出问题的代码行!日志只能报错代码,不能解决cpu过高的问题

步骤

  1. 先用top命令找出cpu占比最高的
    确定进程PID
  2. ps -ef或者jps进一步定位,得知是一个怎么样的一个后台程序惹事
    ps -ef | grep 5101

5101 4063 36 08:25 pts/2 00:11:25 java club.eryastudio.test.Demo2

  1. 定位到具体线程或者代码
    ps -mp 进程 -o THREAD,tid,time
    其中参数解释如下:
    -m 显示所有的线程
    -p pid进程使用cpu的时间
    -o 该参数后是用户自定义格式

ps -mp 1501 -o THREAD,tid,time
root 35.6 19 - - - - 5102 00:11:35

  1. 将需要的线程ID转换为16进制格式(英文小写格式)

    将线程号5102转为小写16进制 13ee

  2. jstack进程ID | grep(16进制线程ID小写英文) -A60

    jstack 5101 | grep 13ee -A60

具体到某一行代码了

————————————————
版权声明:本文为CSDN博主「郝大侠001」的原创文章,遵循 CC 4.0 BY 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jmkmlm123456/article/details/98470854

参考资源链接:[用Delphi模仿任务管理器:解析NtQuerySystemInformation函数](https://wenku.csdn.net/doc/4fcdbdjgt8?utm_source=wenku_answer2doc_content) 为了在Delphi中实现获取CPU占用率的功能,我们通常需要使用Windows的底层系统API函数NtQuerySystemInformation。这个函数能够提供包括系统进程信息在内的各种系统信息。为了获取CPU占用率,我们将特别关注SystemProcessorPerformanceInformation类。以下是具体的实现步骤和代码示例: 步骤1:首先,确保你的Delphi环境已经安装了Windows平台的支持库,并且你有权限调用未公开的Windows API函数。 步骤2:声明必要的函数原型和数据结构。在Delphi中,你需要声明NtQuerySystemInformation函数和SystemProcessorPerformanceInformation结构,如下所示: type TSystemProcessorPerformanceInformation = record IdleTime: LARGE_INTEGER; KernelTime: LARGE_INTEGER; UserTime: LARGE_INTEGER; DpcTime: LARGE_INTEGER; InterruptTime: LARGE_INTEGER; Reserved: LARGE_INTEGER; end; PSystemProcessorPerformanceInformation = ^TSystemProcessorPerformanceInformation; TSystemInformation = record TypeOfInformation: DWORD; NextEntryOffset: DWORD; SystemInformationLength: DWORD; Reserved: DWORD; end; PSystemInformation = ^TSystemInformation; function NtQuerySystemInformation( SystemInformationClass: DWORD; SystemInformation: Pointer; SystemInformationLength: ULONG; ReturnLength: PULONG ): NTSTATUS; stdcall; 步骤3:创建一个函数来调用NtQuerySystemInformation,并返回CPU占用率。代码示例如下: function GetCPUUsage: Double; var SystemInfo: TSystemProcessorPerformanceInformation; Status: NTSTATUS; Length: ULONG; begin Length := SizeOf(SystemInfo); Status := NtQuerySystemInformation(SystemProcessorPerformanceInformation, @SystemInfo, Length, @Length); if (Status = STATUS_SUCCESS) then begin // 计算CPU使用率的逻辑,这里假设第一次调用是获取基准时间 // 然后隔一定时间再次获取,比较两次的时间差来计算CPU使用率 // 为了简化,这里不展示具体的计算过程 Result := ... // 计算得到的CPU使用率 end else Result := -1; end; 步骤4:在你的应用程序中周期性地调用GetCPUUsage函数,并更新UI或执行其他操作。 注意:调用NtQuerySystemInformation函数可能会因为操作系统的不同版本而有所差异,确保你的应用程序能够处理各种不同的返回情况。此外,由于这是一个未公开的API,使用它可能会在未来的Windows更新中导致兼容性问题,建议同时考虑使用官方支持的API来作为替代方案。 以上就是在Delphi中使用NtQuerySystemInformation函数获取CPU占用率的步骤和代码示例。如果你希望更深入地了解如何使用Delphi编程来获取系统信息,或者需要更多关于系统监控的技术细节,可以参考这份资料:《用Delphi模仿任务管理器:解析NtQuerySystemInformation函数》。该资料详细介绍了如何使用Delphi调用NtQuerySystemInformation函数,并提供了深入的项目实战案例,帮助你更全面地掌握相关的技术知识。 参考资源链接:[用Delphi模仿任务管理器:解析NtQuerySystemInformation函数](https://wenku.csdn.net/doc/4fcdbdjgt8?utm_source=wenku_answer2doc_content)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值