Linux的线程创建限制

本文探讨了Linux系统中一个进程能创建的线程数量限制,原因包括内存大小和内核参数等。32位系统限制约为384个线程,64位系统则高达千万级别。然而,过多线程可能导致CPU负载过高,通常建议根据CPU核数创建相应线程。参数max_map_count影响线程创建,创建线程数需考虑其与max_map_count的关系。引用多个资料深入理解相关概念。
摘要由CSDN通过智能技术生成

导言:现网有个版本上线一段时间后,通过SSH重新登陆时显示Cannot allocate memory错误,结果只能通过重启机器来恢复服务。通过分析发现是新的版本引入一个bug,某个进程会不停地创建新的线程,那么问题是Linux下一个进程可以创建多少个线程,从而会导致这个错误出现。

1 原因分析

问题重现,通过一个测试程序,验证错误是否会重现。

#include <iostream>
#include <pthread.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
using namespace std;

void* thr_func (void*)
{
    for(;;) sleep(500);
    return 0;
}

void max_thread_test ()
{
    const int MAX = 4194304;
    //const int MAX = 10;

    int i = 0;
    for (; i < MAX; ++i) {

        int ret = 0;
        pthread_attr_t attr;
        pthread_attr_init(&attr);

        // deta
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值