当前位置:首页 » 操作系统 » linuxcpu线程占用

linuxcpu线程占用

发布时间: 2023-09-19 08:28:02

‘壹’ linux下一个线程占用多少内存

Linux中线程本身是有自己的栈的,这个空间默认是10240,单位是K,所以默认占用10M的内存,但是这是最少的,如果线程中,程序员也是用了内存,那就是大于10M,所以线程最低占用的内存通过ulimit -s查看。

‘贰’ linux 多线程cpu运行时间

这个月时间比较长的,因为这个度现成的CPU使用起来非常的好

‘叁’ CPU占用过高问题的排查及解决

top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器

第一行,任务队列信息,同uptime 命令的执行结果

第二行,Tasks — 任务(进程)

总进程:150 total, 运行:1 running, 休眠:149 sleeping, 停止: 0 stopped, 僵尸进程: 0 zombie

第三行,cpu状态信息

第四行,内存状态

1003020k total, 234464k used, 777824k free, 24084k buffers【缓存的内存量】

第五行,swap交换分区信息

2031612k total, 536k used, 2031076k free, 505864k cached【缓冲的交换区总量】

更多Linux内核视频资料免费·领取后台私信【 内核 】自行获取。

第六行,空行

第七行以下:各进程(任务)的状态监控

详解

top使用方法:

此时发现如果是Java的进程占用过高,并且一直下不来,则排查是什么线程导致占比过高。以图中进程举例,假如发现PID为31357的Java进程占CPU比一直很高,则记录下它的PID

2.查看Java进程里面的线程的占用情况

top -H -p 31357 然后按shift+p按照CPU排序

说明:-H 指显示线程,-p 是指定进程

可以看到CPU占用较高的线程,记下他们的PID,假设这里31357的CPU占比一直是50%

将查找到的 线程占用最高的 tid 上图中 29108 转成16进制 --- 71b4

jstack 31357 > jstack.31357.log

以上能看到指定线程的堆栈信息。如果想看到关于线程中的 锁的附加信息 ,可以加一个-l参数

4.上面方法用于进程正常情况下的堆栈打印

用jstack -l命令没有响应,估计是CPU一直站着不能执行正常的命令,根据提示[The -F option can be used when the target process is not responding]只能放大招了。

jstack -F “PID” > jstack.“PID”.txt

吐出的实际日志结果如下:

发现一大坨线程阻塞了,有用的结果在这里:

显然一直在跑的是19576这个线程,一直在执行EXCEL导出的相关方法,问题就出在这里,下面的任务就是排查这个地方的代码逻辑了。

jstack命令格式:

jstack [ option ] pid

参数说明:

命令格式

jps [ options ] [ hostid ]


参数说明:

三个参数加在一起显示更详细的信息:

发现这些Java进程的启动参数中开放了JMX的远程端口,正常情况下可以通过jconsole远程连接过去看到JVM的日常参数。比如本地访问上图中的pay.war进程:

‘肆’ Linux里面cpu占用太高排查思路是什么

思路就是top查看是什么进程占用高,一般是应用或者数据库,应用方面可以看看运行吐出日志是否有报错信息,查netstat连接应用端口的会话是不是有异常,数据库进程高,可以使用自带的检查命令后台看是否有执行很久的sql事务,锁等待频繁,报错日志等,找到问题针对性的优化,一步一步解决。

‘伍’ 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

显示结果如下:

化主动为被动的方式,一方面减轻了运维工程师的工作,另一方面也减小了运维漏看或者忽略告警的情况发生。

‘陆’ linux查看线程占用cpu

top命令是最方便的,想看CPU列的话直接按字母 c 就会以cpu的使用高低来排列。 其实就每一列的第一个字母,如果想按cpu排列就按c ,按内存排列就按m。 PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND top [-] [d delay] [q] [c] [s] [S] [i] d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。 q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。 S 指定累计模式。 s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。 i 使top不显示任何闲置或者僵死进程。 c 显示整个命令行而不只是显示命令名但是无法显示每个线程的 cpu 利用率情况, 这时就可能出现这种情况,总的 cpu 利用率中 user 或 system 很高,但是用进程的 cpu 占用率进行排序时,没有进程的 user 或 system 与之对应。 可以用下面的命令将 cpu 占用率高的线程找出来: 这个命令首先指定参数'H',显示线程相关的信息,格式输出中包含:user,pid,ppid,tid,time,%cpu,cmd,然后再用%cpu字段进行排序。这样就可以找到占用处理器的线程了。

‘柒’ linux如何查看进程中各个线程的资源占用情况

直接打开资源管理器,再进积栏目中就可以看到各个线程的资源占用情况

热点内容
云服务器历史演进顺序 发布:2025-01-24 09:36:58 浏览:739
研究ftp的意义 发布:2025-01-24 09:31:22 浏览:253
联想安卓升级包在哪里下载 发布:2025-01-24 09:15:20 浏览:591
认票的算法 发布:2025-01-24 09:00:45 浏览:927
android调用打印机 发布:2025-01-24 09:00:32 浏览:808
网易版我的世界服务器如何 发布:2025-01-24 08:55:47 浏览:968
编译器鼻祖 发布:2025-01-24 08:54:11 浏览:844
如何用安卓编译项目 发布:2025-01-24 08:30:46 浏览:863
计算机同时输出和存储设备的区别 发布:2025-01-24 08:29:21 浏览:581
食物语上传 发布:2025-01-24 07:58:44 浏览:754