进程和线程的比较

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

目录

一、前言

二、Linux查看进程、线程

2.1 Linux最大进程数

2.2 Linux最大线程数

2.3 Linux下CPU利用率高的排查

三、线程的实现

四、上下文切换

五、总结


一、前言

进程是程序执行相关资源(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使用率高的排查

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

摩羯座程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值