① Java如何定位占用CPU比较高的问题
一、确定消耗CPU的Java进程
备注:
1、jstack 输出的堆栈信息,线程id对应的16进制为小写,查找时要统一按照小写方式查找
2、jstack输出为当前瞬间的堆栈信息,如果遇到间断性出现CPU高的问题时,需要多输出几次
从上面方式定位到代码Test.main(Test.java:4)处导致了CPU偏高的问题,那我们查看下代码具体如何实现的?
代码实现:
public class Test {
public static void main(String[] args) {
while(true) {
}
}
}
从代码层面看该处实现了一个死循环,所以导致了线程占用CPU偏高的问题。
② windows资源管理器耗电严重怎么办
Windows10资源管理器占用CPU过高该怎么办?因为Windows7系统结束了支持,所以现在很多朋友都升级更新了Windows10系统。在使用Win10系统的过程中,发现Windows资源管理器占用很多CPU资源,导致系统变慢、变卡等问题。那么我们该如何解决问题?接下来小编就来教大家Win10资源管理器占用CPU过高的解决方法,希望大家会喜欢。
Win10资源管理器占用CPU过高的解决方法:
一、重启Windows资源管理器
1.这个方法治标不治本,只能缓解,可能过一会就又会CPU占用过高,具体方法:同时按住Ctrl+shift+ESC打开任务管理器
2.因为我的问题已经解决,所以可以看到CPU占用很少,原来占用80%多,现在选中Windows资源管理器,重启Windows资源管理器如下:
3.重启以后会重新加载资源管理器,我们可以看到CPU使用率已经慢慢降下来,上面也说这只是暂时一个解决办法。
.png
4.重要提示:我们可以在CPU这一栏中看到每个软件占用的CPU,如果哪个软件占用较大,选中软件然后结束任务或者直接卸载软件即可,卸载之后重启系统,如果这个解决了那么接下来的步骤可以适当参考,没有解决则继续操作
二、禁用cotana(小娜) + 禁用问题收集服务
1、禁用cotana(小娜) + 禁用问题收集服务基本上可以解决问题,不会出现反复,但是也不绝对,只能说如果这个都解决不了,那么只有看后面的终极解决方案
2、首先win + R打开运行框并输出如下打开本地组策略:
3、依次展开
4、在Windows组件下找到搜索,单击,可以看到右边有三个cotana选择,我们需要将这三个禁用
.png
5、在右边的选项上双击,弹出选项框,选择禁用,再点击确认。
接下来就是禁用问题收集服务
1、win + R打开运行框并输出services.msc,然后点击确定打开服务
2、然后在本地服务中找到以下三个服务按照下列方法依次禁用
.png
.png
以上介绍的内容就是关于Win10资源管理器占用CPU过高的解决方法
自动系统扫描:
右键点击任务栏上的Windows图标,选择【Microsoft Powershell(管理员)】
逐一输入以下指令:
重启电脑
如果出现”有一些文件无法修复“的回报,重复步骤1-3几次
③ 电脑cpu占用过高怎么处理
电脑cpu占用过高的处理方法:
1. 打开windows任务管理器,ctrl+alt+del然后点任务管理器,点应用程序,将不使用的程序关掉。
2. 打开任务管理器后点进程,会看到cpu的占用情况,将cpu占用比较高的进程结束掉。
3. win+R或者开始-运行,输入msconfig,打开系统配置,关闭不必要的启动项,重启。
4. 如果电脑cpu占用仍然过高,可能是病毒、木马造成。打开杀毒软件进行全盘杀毒。
5. 电脑系统用的时间长了以后会越来越慢,以上方法都不能解决的话我们只好重装系统了。
④ JVM调优jstack怎么找出最耗cpu的线程并定位代码
第一步:先找出java的进程Id(PID) 假设java应用名称是zcg_commodity
ps -ef|grep zcg_commodity
得到进程Id为32464
第二步:找出该进程内最消耗CPU的线程
top -Hp pid
输入top -Hp 32464
TIME列就是各个java线程耗费的CPU的时间,比如图中是线程ID的为2012的线程,
通过 printf “%x\n” 2012
得到2012的十六进制为 7dc
第三步:
一般会进到jdk的bin目录下,root权限执行
jstack 32464|grep 7dc
⑤ Linux里面cpu占用太高排查思路是什么
思路就是top查看是什么进程占用高,一般是应用或者数据库,应用方面可以看看运行吐出日志是否有报错信息,查netstat连接应用端口的会话是不是有异常,数据库进程高,可以使用自带的检查命令后台看是否有执行很久的sql事务,锁等待频繁,报错日志等,找到问题针对性的优化,一步一步解决。
⑥ 怎么找到找出哪个SQL语句导致cpu占用如此高
一般我们可以使用sql server自带的性能分析追踪工具sql profiler分析数据库设计所产生问题的来源,进行有针对性的处理。但我们也可以通过自己写SQL语句来有针对性的进行性能方面的查询。通常会用到如下三个系统视图:sys.sysprocesses ,dm_exec_sessions ,dm_exec_requests
--一、查看当前的数据库用户连接有多少
USE master
GO
SELECT *
FROM sys.[sysprocesses]
WHERE [spid] > 50
--AND DB_NAME([dbid])='gposdb'
SELECT COUNT(*)
FROM [sys].[dm_exec_sessions]
WHERE [session_id] > 50
--二、选取前10个最耗CPU时间的会话
SELECT TOP 10
[session_id] ,
[request_id] ,
[start_time] AS '开始时间' ,
[status] AS '状态' ,
[command] AS '命令' ,
dest.[text] AS 'sql语句' ,
DB_NAME([database_id]) AS '数据库名' ,
[blocking_session_id] AS '正在阻塞其他会话的会话ID' ,
[wait_type] AS '等待资源类型' ,
[wait_time] AS '等待时间' ,
[wait_resource] AS '等待的资源' ,
[reads] AS '物理读次数' ,
[writes] AS '写次数' ,
[logical_reads] AS '逻辑读次数' ,
[row_count] AS '返回结果行数'
FROM sys.[dm_exec_requests] AS der
CROSS APPLY sys.[dm_exec_sql_text](der.[sql_handle]) AS dest
WHERE [session_id] > 50
AND DB_NAME(der.[database_id]) = 'gposdb'
ORDER BY [cpu_time] DESC
--三、查询前10个最耗CPU时间的SQL语句
SELECT TOP 10
dest.[text] AS 'sql语句'
FROM sys.[dm_exec_requests] AS der
CROSS APPLY sys.[dm_exec_sql_text](der.[sql_handle]) AS dest
WHERE [session_id] > 50
ORDER BY [cpu_time] DESC
--四、查询会话中有多少个worker在等待
SELECT TOP 10
[session_id] ,
[request_id] ,
[start_time] AS '开始时间' ,
[status] AS '状态' ,
[command] AS '命令' ,
dest.[text] AS 'sql语句' ,
DB_NAME([database_id]) AS '数据库名' ,
[blocking_session_id] AS '正在阻塞其他会话的会话ID' ,
der.[wait_type] AS '等待资源类型' ,
[wait_time] AS '等待时间' ,
[wait_resource] AS '等待的资源' ,
[dows].[waiting_tasks_count] AS '当前正在进行等待的任务数' ,
[reads] AS '物理读次数' ,
[writes] AS '写次数' ,
[logical_reads] AS '逻辑读次数' ,
[row_count] AS '返回结果行数'
FROM sys.[dm_exec_requests] AS der
INNER JOIN [sys].[dm_os_wait_stats] AS dows ON der.[wait_type] = [dows].[wait_type]
CROSS APPLY sys.[dm_exec_sql_text](der.[sql_handle]) AS dest
WHERE [session_id] > 50
ORDER BY [cpu_time] DESC
--五、查询CPU占用高的语句
SELECT TOP 10
total_worker_time / execution_count AS avg_cpu_cost ,
plan_handle ,
execution_count ,
( SELECT SUBSTRING(text, statement_start_offset / 2 + 1,
( CASE WHEN statement_end_offset = -1
THEN LEN(CONVERT(NVARCHAR(MAX), text))
* 2
ELSE statement_end_offset
END - statement_start_offset ) / 2)
FROM sys.dm_exec_sql_text(sql_handle)
) AS query_text
FROM sys.dm_exec_query_stats
ORDER BY [avg_cpu_cost] DESC
⑦ 如何找CPU占用率过高的语句
可以通过topas等一些命令,找到耗CPU很高的进程pid
然后通过pid找到CPU占用率过高的SQL语句。
这个是我常用的抓耗CPU很高的sql,10G的:
SELECT /*+ ORDERED */
sql_text
FROM v$sqltext a
WHERE a.HASH_VALUE =
(SELECT DECODE(sql_hash_value, 0, prev_hash_value, sql_hash_value)
FROM v$session b, v$process c
WHERE b.paddr = c.addr
and c.spid = '&pid');
⑧ 电脑cpu占用过高怎么办
脑cpu占用过高是因为电脑所开的进程太多,可以通过关闭一些不必要的进程来解决这个问题,具体方法如下:
1、通过shift+ctrl+esc直接进入Windows10的任务管理器,如下图所示:
⑨ 能尽快耗尽及其内存,占光及其cpu有哪些方法
1、在IIS中对每个网站进行单独的应用程序池配置。即互相之间不影响。(进程池越多越占用内存,由于访问网站之后往往不会立即释放内存资源。)
2、设置应用程序池的回收时间,默认为1720小时,可以根据情况修改。同时,设置同时运行的w3wp进程数目为1。再设置当内存或者cpu占用超过多少,就自动回收内存 。
3、设置固定时间加收进程,比如在凌晨1:00至9:00之前访问人数都比较少,影响很少小,可以设定每天在这个时间段内进行内存回收,以减少服务器因 为内存不足带来的影响。设定固定的时间在IIS6中没有限制次数,可以根据实际情况来设定时间比如:晚上12:00,8:00,12:30,6:30等时 间段时间有效的进程池资源回收。
一般来说,这样就可以解决了。但仍然会出现个别网站因为程序问题,不能正确释放。
那么,怎么样才能找到是哪一个网站的?
1、在任务管理器中增加显示pid字段。就可以看到占用内存或者cpu最高的进程pid
2、在命令提示符下运行iisapp -a。注意,第一次运行,会提示没有js支持,点击确定。然后再次运行就可以了。这样就可以看到pid对应的应用程序池
3、到iis中察看该应用程序池对应的网站,就ok了。
⑩ linux cpu使用率过高排查
方法一
第一步:使用
top命令,然后按shift+p按照CPU排序
找到占用CPU过高的进程的pid
第二步:使用
top -H -p [进程id]
找到进程中消耗资源最高的线程的id
第三步:使用
echo 'obase=16;[线程id]' | bc或者printf "%x
" [线程id]
将线程id转换为16进制(字母要小写)
bc是linux的计算器命令
第四步:执行
jstack [进程id] |grep -A 10 [线程id的16进制]”
查看线程状态信息
方法二
第一步:使用
top命令,然后按shift+p按照CPU排序
找到占用CPU过高的进程
第二步:使用
ps -mp pid -o THREAD,tid,time | sort -rn
获取线程信息,并找到占用CPU高的线程
第三步:使用
echo 'obase=16;[线程id]' | bc或者printf "%x
" [线程id]
将需要的线程ID转换为16进制格式
第四步:使用
jstack pid |grep tid -A 30 [线程id的16进制]
打印线程的堆栈信息
案例分析
场景描述
生产环境下JAVA进程高CPU占用故障排查
解决过程
1、根据top命令,发现PID为2633的Java进程占用CPU高达300%,出现故障。
2、找到该进程后,如何定位具体线程或代码呢,首先显示线程列表,并按照CPU占用高的线程排序:
1[root@localhost ~]# ps -mp 2633 -o THREAD,tid,time | sort -rn
显示结果如下:
化主动为被动的方式,一方面减轻了运维工程师的工作,另一方面也减小了运维漏看或者忽略告警的情况发生。