目录
一、前言
进程是程序执行相关资源(CPU、内存、磁盘等)分配的最小单元,是一系列线程的集合,进程之间相互独立,有自己的内存空间;线程是CPU资源分配的最小单元,线程需要的资源更少,可以看做是一种轻量级的进程,线程会共享进程中的内存,但线程使用独立的栈、程序计数器,线程相互通信更加方便。
在项目开发中,经常会用到线程以及多线程功能来实现异步任务处理等。项目上线之后,如果出现服务CPU高的异常情况,那么这个时候就需要借助Linux(因为一般情况服务都是使用Linux)查看进程、线程来定位最终的问题。
二、Linux查看进程、线程
2.1 Linux最大进程数
Linux中进程可创建的实际值通过进程标识值(process identification value)-PID来标示,可以使用
cat /proc/sys/kernel/pid_max 查看系统中可以创建的进程数实际值

可以使用ulimit命令修改最大限制值,
ulimit -u 1024
如果要修改kernel.pid_max的值,需要使用
sysctl -w kernel.pid_max=1024
2.2 Linux最大线程数
用ulimit -s可以查看默认的线程栈大小,一般情况下,这个值是8M=8192KB

不过Java程序受JVM堆空间的限制,比如以下代码
public class ThreadExample extends Thread{
public static void main(String[] args) {
for(int i = 0; i < 100000; i++){
ThreadExample myThread = new ThreadExample(i);
myThread.start();
}
}
private Integer threadNo;
ThreadExample(Integer threadNo){
threadNo = threadNo;
System.out.println("ThreadNo = " + threadNo);
}
@Override
public void run(){
while (true){
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
在idea上设置-Xmx1m,启动运行程序,创建出部分线程后,会报OutOfMemoryError错误

2.3 Linux下CPU使用率高的排查
示

本文详细讲解了Linux中查看进程和线程的方法,包括进程和线程的区别、Linux最大进程数和线程数的设置,以及如何通过代码实例和工具如jstack排查CPU占用过高的问题。还讨论了上下文切换对多线程性能的影响和分析方法。
最低0.47元/天 解锁文章
2343

被折叠的 条评论
为什么被折叠?



