- PR -

Error code 23: Too many open files in system に関して

1
投稿者投稿内容
かなもの
ベテラン
会議室デビュー日: 2006/08/07
投稿数: 62
投稿日時: 2007-12-28 10:02
いつもここにはお世話になっております。かなものと申します。

OSはRHEL2.1を使用しており、これにMySQL4.1.21をSourceからインストールしている状態です。
この状況で、ある日下記内容がMySQLのログに記載されていました。

InnoDB: Operating system error number 23 in a file operation.
InnoDB: Error number 23 means 'Too many open files in system'.

Operating system error number 23 の意味を調べる為に「perror」コマンドが存在する事を知り、
下記のように実行してみました。

# perror 23
Error code 23: Too many open files in system

たしかにMySQL上にあるエラーと一致していました。
このエラーの意味を調べると、システム上にあるオープンファイルが上限に達しているという意味との事。
その事を調べるのに、下記コマンドが有効だという情報を知り、早速実行してみました。

# cat /proc/sys/fs/file-nr
22720 2651 30132

左から
OS起動後の今まで開いていた過去最大ファイルオープン数・コマンド実行時現在のファイルオープン数・OSの最大ファイルオープン数
と自分では認識しています。

これですと、まだ8000程余裕があるように見えるのですが、この状態でもToo many open files in systemが発生する事はありえるのでしょうか。
それとも自分の認識が間違っている為、誤った解釈になっているのでしょうか。

ご教授願えれば幸いです。

_________________


[ メッセージ編集済み 編集者: かなもの 編集日時 2007-12-28 11:55 ]
angel
ぬし
会議室デビュー日: 2005/03/17
投稿数: 711
投稿日時: 2007-12-28 12:10
こんにちは。
引用:
このエラーの意味を調べると、システム上にあるオープンファイルが上限に達しているという意味との事。


確かに「システムの上限」の場合もあるのですが、プロセス毎の上限にひっかかった場合も、同じエラーではないかと思います。
mysql はテーブル毎にこまごまとファイルを沢山作るようですから…。
ulimit の -n オプションが、確かプロセスでのファイルディスクリプタ数の制限に対応するはずです。足りなければ、mysql起動スクリプトで、上限を上げておく必要があるでしょう。

※ls -l /proc/【mysqlのプロセスID】/fd を試してみれば、どれくらいファイル・ソケットを開いているかが見えます。
かなもの
ベテラン
会議室デビュー日: 2006/08/07
投稿数: 62
投稿日時: 2007-12-29 15:39
お返事ありがとう御座います。

プロセス毎の上限にひっかかった場合も可能性があるというのは、頭にありませんでした。

今は手元に機器が無く、すぐに調べる事が出来ませんが、
「ls -l /proc/【mysqlのプロセスID】/fd」
このコマンドも有力な情報でした。ありがとう御座います。

調べられる状況になりましたら、この上記コマンドで状況を確認したいと思います。

ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)