Dubbo无法创建新线程异常解决方案

一、问题

在测试环境遇到的异常信息,如下:

异常信息:

Caused by: java.lang.OutOfMemoryError: unable to create new native thread

二、问题分析

项目的实际配置:

<dubbo:provider timeout="50000" threadpool="fixed" threads="500" accepts="1000" />
  • timeout=”5000”:设置远程调用服务的超时时间为5000毫秒
  • threadpool=”fixed”:线程模型为固定大小的线程池,启动时建立线程,不关闭,一直持有
  • threads=”500”:线程数为500
  • accepts=”1000”:限制服务器端的接受的连接的最大值为1000

再看看dubbo官网上的线程模型的内容

结合上面的异常信息,我们可以知道dispatcher的默认配置值为all(AllChannelHandler来处理消息请求),因为测试环境上部署了好几个应用,如果每个应用都占用了500个线程,那Linux机器中默认配置的线程数是不够用的,所以就导致java.lang.OutOfMemoryError: unable to create new native thread

三、问题解决方案

结合Linux线程数限制配置来进行调优

[ylp@test-web-pay-01 ~]$ vi /etc/security/limits.d/20-nproc.conf
# Default limit for number of user's processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.
*          soft    nproc     1024

root       soft    nproc     unlimited

从配置文件中我们可以知道,root用户的创建线程数是没有限制的,普通用户可以创建的线程数默认是1024,如果一个Linux机器上部署太多的应用,那么就会耗光线程数,导致java.lang.OutOfMemoryError: unable to create new native thread异常 可以使用Linux命令查看可以创建最大的进程数

[ylp@test-web-pay-01 ~]$ ulimit -u
63477

那我们一般把值设置为和ulimit相同即可 调整时要注意:

  • 尽量不要使用 root 用户来部署应用程序,避免资源耗尽后无法登录操作系统。
  • 普通用户的线程数限制值要看可用物理内存容量来配置,同时还要结合Linux机器上有多少个用户

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏JavaQ

关于Cookie的细致总结

Cookie概述 HTTP是一种无状态的请求/响应协议,用户通过浏览器访问Web站点后,Web服务端没有可用信息来判断是哪个用户发起的请求,更加无法知道下次访问...

3444
来自专栏LanceToBigData

TCP/IP(七)之玩转HTTP协议

前言   前面一篇的博文简单的介绍了一下属于应用层的HTTP协议,这一篇我将详细的学习HTTP协议,这也是做Web开发中一定要用到的协议。虽然我是做大数据的,但...

2819
来自专栏糊一笑

谈谈webpack2的一些事

从v1迁移到v2 1. 配置类型 在webpack1的时候,主要是通过导出单个object来进行配置。例如下面的配置: // webpack1 导出方式 mod...

3095
来自专栏从零学习云计算

Centos7.2学习记录(3)——搭建本地yum仓库

入职以来,由于公司云主机运行在内网环境下,在搭建kubernetes和openshift集群时都需要进行离线安装,这里粗略记录一下本地yum仓库的搭建过程。 ...

4120
来自专栏编码前线

HTTP协议简介

1342
来自专栏smy

前后端分离之vue2.0+webpack2 实战项目 -- webpack介绍

webpack的一点介绍 Webpack 把任何一个文件都看成一个模块,模块间可以互相依赖(require or import),webpack 的功能是把相互...

3736
来自专栏pangguoming

Git忽略规则.gitignore梳理

对于经常使用Git的朋友来说,.gitignore配置一定不会陌生。废话不说多了,接下来就来说说这个.gitignore的使用。

902
来自专栏YG小书屋

ES集群如何做到高可用

4015
来自专栏一个爱瞎折腾的程序猿

Ubuntu16.04下安装mysql

不设置将会提示错误信息:1103 -Host '192.168.1.233' is not allowed to connect to this MySQL s...

2281
来自专栏散尽浮华

Git忽略规则.gitignore梳理

对于经常使用Git的朋友来说,.gitignore配置一定不会陌生。废话不说多了,接下来就来说说这个.gitignore的使用。 首先要强调一点,这个文件的完整...

1887

扫码关注云+社区

领取腾讯云代金券