[ERROR] Error in accept: Too many open files 的解决方案

解决方案:

1.在/etc/rc.local 中增加一行 ulimit -SHn 65535  或
2.在/etc/profile 中增加一行 ulimit -SHn 65535   或
3.在/etc/security/limits.conf最后增加如下两行记录
* soft nofile 65535
* hard nofile 65535

产生原因:

这个一般都是在mysql上发生的。

理论上 mysqld  open file 后会 cache 住,那它要开到多少个档案之后,才会去释放掉 cache 的档案?那就得看 my.cnf 里面,table_cache, max_connections, open_files_limit 的值,如果open_files_limits 的值为 0,就看 table_cache max_connections 透过某个函数计算出来的值;如果 open_files_limits 的值不为 0,那应该是要看这个值的大小设定。

问题来了,那个函式怎么算的,一般说法是 table_cache * 2 + max_connections,我自己的系统则是还要再 +10,我在my.cnf 原本的设定是table_cache 1024, max_connections 150, open_files_limits 则不设 (default:0),结果计算出来是 1024 x 2 + 150 + 10 = 2208,所以照理论来说 mysql 可以开到 2208 个档案。但实际却在我 DBtable 数大增后,便很容易因为文章一开头的error  mysql 挂点了。


仔细一看 log 后更可以进一步发现这个 [Warning] Could not increase number of max_open_files to more than1024 (request: 2208)

换句话说,如果 table_cache * 2 + max_connections 超过 1024 就会有警告,而 1024 便是 ulimit -n 那个 1024,即 shell的限定使用资源。因此mysql 真正会挂的主因是,它认为可以开到 2208 个,但系统只给它开到 1024 个,所以 mysql 就会一直去开第 1025 个失败,然后mysql挂了

未经允许不得转载:啊福主机 » [ERROR] Error in accept: Too many open files 的解决方案

赞 (2)

评论 4

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. 王琪亮问一下阿福卖独立IP的主机吗?回复
    • 阿福是的,我们卖独立IP的,但是独立IP仅支持美国主机。香港主机的IP成本可能会让用户不能接受。回复
      • 王琪亮😀 😀 洛杉矶机房可以定制吗?回复
        • 阿福完全可以,但请知晓,定制并不支持使用优惠码。回复