导言:现网有个版本上线一段时间后,通过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);

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

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



