
2週間前に新しいサーバーを購入しましたが、それ以来、このサーバーのデータベースへの接続で時々エラーが発生します。これはmysqldを再起動した後のエラーログです。
var/log/mysqld.log:
131206 10:54:37 [ERROR] Error in accept: Too many open files
131206 10:58:53 [ERROR] Error in accept: Too many open files
131206 11:03:09 [ERROR] Error in accept: Too many open files
131206 11:07:25 [ERROR] Error in accept: Too many open files
131206 11:11:41 [ERROR] Error in accept: Too many open files
131206 11:15:58 [ERROR] Error in accept: Too many open files
131206 11:20:14 [ERROR] Error in accept: Too many open files
131206 11:24:30 [ERROR] Error in accept: Too many open files
131206 11:28:46 [ERROR] Error in accept: Too many open files
131206 11:33:02 [ERROR] Error in accept: Too many open files
この問題を解決するにはどうすればいいでしょうか?
英語が下手ですみません。
アップデート:
my.cnf の更新を手伝ってもらえますか?
[mysqld]
local-infile=0
innodb_file_per_table
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
Linux server.com 2.6.32-279.el6.x86_64 #1 SMP Fri Jun 22 12:19:21 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
PHP 5.3.27 (cli) (built: Nov 28 2013 02:21:29)
Copyright (c) 1997-2013 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2013 Zend Technologies
with the ionCube PHP Loader v4.4.4, Copyright (c) 2002-2013, by ionCube Ltd., and
with Zend Guard Loader v3.3, Copyright (c) 1998-2010, by Zend Technologies
mysql Ver 14.14 Distrib 5.5.31, for Linux (x86_64) using readline 5.1
CentOS release 6.4 (Final)
答え1
最後の更新では、開いているファイルが多すぎるという問題があることが示されています。開いているファイルの最大数に対する ulimit を増やす必要があります。
デフォルトは1024だと思います(executeで確認できますulimit -a
)。executeでこの値を増やします。
ulimit -n 新しい値
これにより、実行中のセッションに新しい値が設定され、すぐに有効になります。
あるいは、再起動後も変更内容を維持したい場合は、次の操作を行います。root として、/etc/security/limits.conf ファイルを編集し、末尾に次の 2 行を追加します。
* ソフトノーファイル 16000 * ハードノーファイル 20000
上記の 2 行は、ファイル ハンドルの最大数 (nofile) を新しい設定に変更します。