IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 实战遇到:unable to create new native thread的解决方案 -> 正文阅读

[系统运维]实战遇到:unable to create new native thread的解决方案

前言

感谢:以下两个链接,让我解决了这个难点

  • https://www.bilibili.com/video/BV1Vy4y177YB?p=9
  • https://www.jianshu.com/p/bee721de277a

一、问题描述

按照报错信息:大致意思是没办法创建新的原生线程

二、问题跟踪

主要从linux的相关线程数、进程数等配置方面进行分析

  • cat /proc/sys/kernel/threads-max #系统允许的最大线程数
  • echo “65535” > /proc/sys/kernel/threads-max #修改最大线程数
  • ulimit -u #查看用户最大进程数
  • cat /proc/sys/kernel/pid_max #查看系统允许的最大进程数
  • 一个进程有多个线程,所以按逻辑上面的问题,跟进程数无关
  • 然后使用上面的逻辑,将最大线程数设置小一点,确实复现了那个问题
  • 但是生产环境threads-max,20+万,按理来说不可能会超
  • 生产环境user max processes 才1024
  • 但是我将本机user max processes 也改成1024,发现也没问题,初步排除这个问题
    总结:threads-max可以引起那个报错,但是生产这个值太大,按逻辑,不可能是这个参数引起

三、进一步跟踪

通过上面的两个链接,得出以下几个重点信息:

  • user max processes 用户进程,主要使用来限制非root用户的
  • 并且当如果是非root用户的时候,进程和线程的概念很模糊,也就是说我启动2000线程,就相当于2000进程,那如果我设置1024,在非root用户下启动,有可能造成上面的问题

四、具体实践

  • 先将user max processes 改成800
大致的位置有这几个:/etc/security/limits.conf、/etc/security/limits.d/90-nproc.conf、/etc/security/limits.d/20-nproc.conf(我这边测试了,是在/etc/security/limits.conf,如果设置无效,其他2个位置也设置看看)
描述:
soft   xxx    : 代表警告的设定,可以超过这个设定值,但是超过后会有警告。
hard  xxx   : 代表严格的设定,不允许超过这个设定的值。
如:soft 设为1024,hard设为2048 ,则当你使用数在1~1024之间时可以随便使用,1024~2048时会出现警告信息,大于2048时,就会报错。
nproc  : 是操作系统级别对每个用户创建的进程数的限制
nofile  : 是每个进程可以打开的文件数的限制

配置如下(*代表所有用户,但是不包含root,root需要的话,就要单独配置):
*          hard    nproc     800
*          soft    nproc     800

在这里插入图片描述

  • 然后查询当前程序的进程数
pstree -p pid| wc -l

在这里插入图片描述

  • 然后通过jmeter进行调用
    在这里插入图片描述
    在这里插入图片描述
  • 调用到一半,直接报错,并且去查看进程数,直接不能使用相关命令了
  • 然后按照同样的方式,使用root启动服务,user max processes不生效

总结

  • 如果服务启动的时候,是使用一般用户,要将user max processes 设置大点,比如65535
  • 在一般用户的情况下: user max processes =该用户下的进程数+该用户下的线程数
  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-04-28 12:14:41  更:2022-04-28 12:17:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 19:28:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码