HOME 生活记录运维/编程
作者/来源:yixinu.com
栏目:运维/编程
日期:2020-12-05 17:52:51

转发自:  http://blog.chinaunix.net/uid-20662820-id-5690021.html


1、发现问题出在alloc_pid失败,分析内核代码,这个受限于kernel.pid_max参数

2、单个线程的mmap个数限制,受限于vm.max_map_count参数。

3、还有一个参数 kernel.threads-max限制

4、内存限制

dup_task_struct-->alloc_task_struct_node/alloc_thread_info_node/arch_dup_task_struct-->kmme_cache_alloc_node(slub.c)-->slab_alloc_node-->

                    “CONFIG_MEMCG_KMEM” //这里也是一个坑,docker这种基于cgroup的也会影响,可能会因为分配给slub的内存不够用出现线程限制

具体函数:

alloc_pages---->__memcg_kmem_newpage_charge-->memcg_charge_kmem-->__res_counter_charge-->res_counter_charge_locked


5、虚拟内存限制


总结

/proc/sys/kernel/pid_max #操作系统线程数限制


/proc/sys/kernel/thread-max  #操作系统线程数


max_user_process(ulimit -u) #系统限制某用户下最多可以运行多少进程或线程


/proc/sys/vm/max_map_count #单进程mmap的限制会影响当个进程可创建的线程数


/sys/fs/cgroup/memory/${cgroup}/memory.kmem #单个docker 内核内存的限制,可以影响task_struct等slab节点的申请,间接影响可创建的线程数


分享到:

Copyright © 2013-2014 yixinu.com 湘ICP备14004402号

QQ:316686606  Email: 316686606@qq.com