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

Linux里面cpu占用太高排查思路是什么,第1张

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

一,在centos linux 上查看进程占用cpu过高

top

shift+h

查看哪个进程程消耗最高

二,查看JAVA进程中哪个线程消耗最高

21 导出java运行的线程信息

jstack 进程id(jps查看)

jstack 进程id > pstxt

jstack -l 进程id (窗口打印)

//另外还有一种方式

如果启动方式如下:

nohup java -classpath conf/:myjar  comtankmanClass>/logout 2>&1 &

则执行: kill -3 PID,进程信息会输出到/logout

22 查找最消耗cpu的java线程

jps

找到java进程PID

命令:ps -mp pid -o THREAD,tid,time   或者  ps -Lfp pid

通过%CPU和 TIME,判断占用的线程TID

找到TID,转换成16进制,然后在上面(jstack 进程id > pstxt)导出的文件中搜索,就可以定位到具体的线程,类。

文中先讲解函数,再运行实例,以及一些注意事项。

函数 pthread_create ,使用 man 3 pthread_create 查看介绍。

函数描述:

通过 pthread_create 创建的新线程,有收下四种方法退出线程:

attr参数 是一个 pthread_attr_t 结构体,它在线程被创建时被用来设定新线程的属性。这个结构体的初始化是通过 pthread_attr_init() 函数。如果该参数为空,那么新线程会使用默认的属性参数。

在 pthread_create 函数调用返回之前,新线程的内存指针会赋给 thread 参数,表示线程的ID,这个ID的作用是在后续可以调用针对该线程的其它pthreads函数。

返回值

成功返回0,失败返回一个错误编号,同时 thread 参数也不会被赋值。

函数描述

pthread_join 函数会等待指定的线程结束,如果指定的线程已经线束,那么它会立即返回。指定的线程必须是joinable的。也就是说, pthread_join() 函数会 一直阻塞调用线程,直到指定的线程tid终止 。当 pthread_join() 返回之后,应用程序可回收与已终止线程关联的任何数据存储空间 ,(另外也可设置线程attr属性,当线程结束时直接回收资源)如果没有必要等待特定的线程终止之后才进行其他处理,则应当将该线程分离 pthread_detach() 。

如果 retval 不为空,那么该函数会拷贝退出状态值到 retval 指向的内存中,如果目标thread被cancel了, retval 的值为 PTHREAD_CANCELED

返回值

成功返回0,错误返回错误码

pthread_setname_np, pthread_getname_np :设置/获取线程的名称

编译和链接需要参数 : -pthread

默认情况下,所有使用 pthread_create() 创建的线程都继承程序名称。 pthread_setname_np() 函数可用于为线程设置唯一名称,这对于调试多线程应用程序非常有用。 线程名称是一个有意义的 C 语言字符串,包括终止空字节 ('\0')在内,其长度限制为 16 个字符。 thread 参数指定要更改名称的线程; name 指定新名称。

pthread_getname_np() 函数可用于获取线程的名称。 thread 参数指定线程。 缓冲区 name 用于存放返回的线程名称; len 指定缓冲区的可用字节数。 区长度至少应为 16 个字符。 输出缓冲区中返回的线程名称将以空 ('\0')终止。

成功时,这些函数返回 0; 出错时,它们返回一个非零错误号。

pthread_setname_np() 函数可能会失败并出现以下错误:

ERANGE name 指定的字符串长度超过了允许的限制。

pthread_setname_np() 函数可能会失败并出现以下错误:

ERANGE name 和 len 指定的缓冲区太小,无法容纳线程名称。

如果这些函数中的任何一个无法打开 /proc/self/task/[tid]/comm,则调用可能会失败并出现 open(2) 中描述的错误之一。(见NOTES)

从实现上讲,pthread_setname_np()将线程的名称写入到了/proc FS的comm文件:/proc/self/task/[tid]/comm

pthread_getname_np()则是从相同的位置获取线程名

您好,您问的是Java Thread和Thread的区别?

Java Thread是Java中的一种多线程技术,它是Java语言中提供的一种多线程技术,它可以实现多个线程同时执行,它可以实现多个线程之间的协作和交互。

Thread是Java中的一种原生线程技术,它是Java语言中提供的一种原生线程技术,它可以实现多个线程同时执行,它可以实现多个线程之间的协作和交互。Thread是Java中的一种原生线程技术,它是Java语言中提供的一种原生线程技术,它可以实现多个线程同时执行,它可以实现多个线程之间的协作和交互。它提供了一种更加灵活的方式来实现多线程编程,可以让程序员更轻松地实现多线程编程。

总结来说,Java Thread是Java中的一种多线程技术,它可以实现多个线程同时执行,它可以实现多个线程之间的协作和交互;而Thread是Java中的一种原生线程技术,它可以实现多个线程同时执行,它可以实现多个线程之间的协作和交互,它提供了一种更加灵活的方式来实现多线程编程。

可以用下面的命令将 cpu 占用率高的线程找出来:

ps H -eo user,pid,ppid,tid,time,%cpu,cmd --sort=%cpu

这个命令首先指定参数'H',显示线程相关的信息,格式输出中包含:user,pid,ppid,tid,time,%cpu,cmd,然后再用%cpu字段进行排序。这样就可以找到占用处理器的线程了。

直接使用 ps Hh -eo pid,tid,pcpu | sort -nk3 |tail 获取对于的进程号和线程号,然后跳转到3

查看哪个进程线程占用cpu过高; top / ps -aux, 获得进程号

确定哪个线程占用cpu过高,进入进程号的目录:/proc/pid/task,

执行:grep SleepAVG /status | sort -k2,2 | head, 确定cpu占用较高的线程号。

使用kill -3 pid 会打印线程堆栈的情况

在 Linux 下 top 工具可以显示 cpu 的平均利用率(user,nice,system,idle,iowait,irq,softirq,etc),可以显示每个 cpu 的利用率。但是无法显示每个线程的 cpu 利用率情况,这时就可能出现这种情况,总的 cpu 利用率中 user 或 system 很高,但是用进程的 cpu 占用率进行排序时,没有进程的 user 或 system 与之对应。

以上就是关于Linux里面cpu占用太高排查思路是什么全部的内容,包括:Linux里面cpu占用太高排查思路是什么、查看JAVA进程中哪个线程CPU消耗最高、Pthread线程使用详解等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9667320.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存