FreeBSD:「開いているファイルが多すぎます」しかし、さらに160,000ファイルを開くことができるはずです


11

私はFreeBSD 8システムでZFSを実行しており、MySQL 5.5サーバーは約355GBで、数テラバイトになると予測されています。

MySQLがで「開いているファイルが多すぎます」に関するエラーを引き起こしています/etc/hosts.allow。明示的には使用していません/etc/hosts.allowが、hosts_access(3)libwrap.a)で使用されています。

mysqld[1234]: warning: /etc/hosts.allow, line 15: cannot open /etc/hosts.allow: Too many open files

しかし、チェックすると実際の制限に達していないようです。報告されているオープンファイルの数はkern.openfiles stays、継続的に40,000未満であり、上限は大幅に高くなっています。

# sysctl -a |grep files
kern.maxfiles: 204800
kern.maxfilesperproc: 184320
kern.openfiles: 38191

# ulimit -n
184320

オープンファイルは無制限に設定する必要があります:

# grep openfiles /etc/login.conf
    :openfiles=unlimited:\

MySQLは184320のファイルハンドルを開くことができるはずであると述べています。

# mysqladmin variables | grep open_files_limit
| open_files_limit                              |     184320                |

また、MySQLユーザーの観点からのいくつかの情報。私はmysqlを停止し、ハッキング/usr/local/etc/rc.d/mysql-serverしてこれらの変数を出力したので、これはMySQL環境を表すはずです。184320という数字は上記と一致していることに注意してください。

# /usr/local/etc/rc.d/mysql-server.stefantest start
Starting mysql.
cpu time               (seconds, -t)  unlimited
file size           (512-blocks, -f)  unlimited
data seg size           (kbytes, -d)  33554432
stack size              (kbytes, -s)  524288
core file size      (512-blocks, -c)  unlimited
max memory size         (kbytes, -m)  unlimited
locked memory           (kbytes, -l)  unlimited
max user processes              (-u)  5547
open files                      (-n)  184320
virtual mem size        (kbytes, -v)  unlimited
swap limit              (kbytes, -w)  unlimited
sbsize                   (bytes, -b)  unlimited
pseudo-terminals                (-p)  unlimited

また、簡単に参照できるように、sysctlの説明を次に示します。

kern.maxfiles: Maximum number of files
kern.openfiles: System-wide number of open files
kern.maxfilesperproc: Maximum files allowed open per process

関連する


4
ulimitはグローバルではありません。MySQLを実行しているulimitと同じですか?
derobert 2013年

1
では、MySQLデーモンのulimit値を確認したり、デーモンを停止せずにデーモンのulimit値を変更したりできますか?ulimit起動スクリプトまたはシェル環境で設定できることはわかっていますが、データベースを中断する必要があります。
Stefan Lasiewski、2013年

1
mysqlサービスのPIDを持つサブディレクトリの下の/ procを調べます。cat limitsmysqlの実行状況を確認できます。それらをその場で変更することもできます(新しいカーネルを使用):(echo -n "Max open files=soft_value:hard_value" > /proc/$PID/limitsもちろんルートとして)
lornix 2013

1
@lornix:これはFreeBSDです。私自身はBSDを使用したことがありませんが、FreeBSDが実際に/ proc / * / limitsをサポートしているかどうかはわかりません。
マーティンフォンヴィッティヒ2013

1
/procFreeBSDではデフォルトでマウントされていませんが、で自分で行ってください。詳細sudo mount -t procfs proc /procについてprocfs(5)は、を参照してください。/procマウントしたら、/proc/$PID/rlimitファイルを確認してください
zygis 2013

回答:


1

/etc/login.confを確認し、mysqlユーザーがどのログインクラスに割り当てたかを確認します。それはおそらくデフォルトかデーモンです。ユーザーの制限を変更する場合は、新しいクラスを作成し、ユーザーをそのクラスに割り当て、そのクラスの制限を必要に応じて変更してから、「cap_mkdb /etc/login.conf」を実行します

これをまだ読んでいない場合は、次のようにしてください:http : //www.freebsd.org/doc/handbook/users-limited.htm

/ etc / rcによってシステム起動時に開始されたプロセスは、デーモンログインクラスに割り当てられます。


0

一部のOSでは、通常のユーザーに対するセキュリティの問題を回避するために制限が設定されていman limits.conf
ます。このファイルで、スレッドの最大数や開いているファイルの最大数などのプロセスごとの制限を定義するかどうかを読むことを検討してください。そこから制限使用面が出てくる可能性があります。 /etc/security/limits.conf

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.