わかりにくいファイル記述子の漏れの問題を解決するのに役立ちます。

わかりにくいファイル記述子の漏れの問題を解決するのに役立ちます。

過去6ヶ月間、私は取り除くことができない問題に直面していました。ランダムに「開いたファイルが多すぎます」/「TCP / IPソケットを開けません(24)」/「getaddrinfo:OK」I私のアプリケーションログに「ファイルを開けません」というエラーが表示されます。

私は次のスタックを実行します:mariadb、postgresql、memcached、redis、およびDockerコンテナ内の複数のノードベースのアプリケーション、Ruby on Rails(ruby 2.5.5、Rails 6)アプリケーション、およびsidekiqを実行するPassengerを持つApache、すべてCentOS 7システムで(3.10.0-1127.el7.x86_64)、6コア、16GB RAM。負荷は平均約10%であり、週勤務の間に小さなピークが現れ、30%を超えることはほとんどありません。

最初は、他のJavaアプリケーションが問題を引き起こすと考え、アプリケーションを閉じた後もしばらくして問題が発生し続けました。

私が何をしても、それをCLIで再現することはできません。これは明らかにシステムに大きな負荷なしでランダムに発生するようです。

サービスが再起動してから1時間後、次の統計が表示されます。

開いたファイルの総数

$ lsof | wc -l
30594

オープンファイル別の親プロセス

$ lsof | awk '{print $1}' | sort | uniq -c | sort -r -n | head
   8260 mysqld
   4804 node
   2728 Passenger
   2491 container
   2095 postgres
   1445 dockerd
   1320 processor
    817 php-fpm
    720 httpd
    709 ruby

MariaDB変数:

MariaDB [(none)]> Show global variables like 'open_files_limit';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| open_files_limit | 65535 |
+------------------+-------+
1 row in set (0.01 sec)

MariaDB [(none)]> Show global status like 'opened_files';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Opened_files  | 6151  |
+---------------+-------+
1 row in set (0.00 sec)

sysctl.confの最大オープンファイル数を130kに設定すると、問題が解決すると思われ、少し時間がかかりましたが、後で表示され続けます。

$ sysctl fs.file-nr
fs.file-nr = 3360   0   131070

私はすぐに「ab」テストを実行しましたが、開かれたファイルの数があまり増えませんでした。

$ ab -n 1000 -c 10 http://www.example.com/

   9589 mysqld
   4804 node
   4577 Passenger
   3756 httpd
   3225 postgres
   2491 container
   2166 utils.rb:
   2080 ruby
   1445 dockerd
   1364 processor

実際のユーザーはホームページを繰り返し訪問しないので、これは重要ではないかもしれません。

犯人がDockerかもしれないという予感がありますが(データベースをDocker化せずにより忙しいサーバーを実行しました)、データベースをDockerから移動する前に他の可能性を調べるのが非常に痛みを伴うプロセスになるため、調査したいと思います。

いくつかのアドバイスを得ることを願っています。

答え1

これは4096個のinotifyハンドラしかないからです。制限を増やしたところ、問題はなくなりました。

fs.file-max = 131070
fs.inotify.max_user_watches = 65536

関連情報