SequoiaDB报告创建线程失败的解决办法

  

1。问题背景
对于分布式数据库和分布式环境,高并发和高性能压力的情况下,出现线程创建失败等等问题也是十分常见的,这时候就十分考虑数据库管理员的经验,需要能快速的定位到问题和瓶颈所在,快速解决。本文也是作为一个最佳实践,告诉大家如何在高并发情况下定位问题,排除问题,解决瓶颈。

  

2。问题定位
SequoiaDB在集群环境中-10年的错误码,在认真查阅节点的diaglog日志后,发现是操作系统创建线程失败的问题。
如我们的测试环境下,SequoiaDB节点的diaglog的错误日志信息
 SequoiaDB报告创建线程失败的解决办法”> <br/>阅读这个错误日志的内容,通过看到类似如下的关键信息<br/>未能创建新的代理:boost:: thread_resource_error:资源temporaily不可用<br/>未能创建新的代理,探针=30 <br/>未能创建代理线程,rc=-10 <br/>未能开始会话EDU, rc=-10 </p>
  <p>那么一般操作系统在创建线程时,会受限于哪些参数呢,主要有几个:文件句柄数限制,操作系统句柄数限制和内存资源。</p>
  <p> 1)文件句柄数<br/>在linux操作系统中,号称一切皆为文件,无论是进程,线程,猛击者还是其他,最终都会被操作系统归为文件操作。操作系统或者进程,每申请一个资源,例如线程,突出的事物,都会打开一个文件,那么这个文件打开状态,就可以简单理解为文件句柄,其中,“句柄数限制”代表操作系统或者某个进程所能够打开的最多文件的数量的限制。</p>
  <p>大家有了这个概念后,我们再来看操作系统是如何对文件句柄数进行限制的。在操作系统中,有一个神奇的命令——ulimit这一个命令可以设置许多限制值,进程文件句柄数就是其中之一。<br/>例如我们可以查看根用户的ulimit输出,n=1024就打开文件是根用户允许进程打开的最大文件句柄数。<br/> <img src=SequoiaDB报告创建线程失败的解决办法