あいしんくいっとオススメ商品レビュー

squidで「out of filedescriptors」と出力された時の対処方法

本記事対象
squidで「out of filedescriptors」と出力された時の対処方法が知りたい方

ども。あいしんくいっと(@ithinkitnet)です。

squidプロキシ下のとある現場にて。

ネットワークが超遅いんだけど。

誰か

そう言われて調査したところ、確かにネットワークが遅い。

ithinkit

これは何が原因だろう・・・。もしかして、プロキシ!?

squidの/var/log/squid/cache.logを確認したところ、以下のエラーが大量に出力されていた。

client_side.cc(2996) okToAccept: WARNING! Your cache is running out of filedescriptors

調べたところ、どうやら「squidのファイルディスクリプタ値が限界を超えてるよー?」というエラーであることが判明。

MEMO
squidのファイルディスクリプタはsquid.confに指定がない場合のデフォルト値は1024。

squidファイルディスクリプタ値変更

まずはsquidファイルディスクリプタの現状値を確認します。
本来であれば、squidclientで確認出来るはずだったけど、何故か値が確認出来なかったので泥臭くいく方法を試しました。

squidのpidを確認。今回は「2673」。

squidのpid確認
# ps -ef | grep squid
root      2673     1  0 Aug19 ?        00:00:00 squid -f /etc/squid/squid.conf
squid     2676  2673  0 Aug19 ?        13:11:21 (squid) -f /etc/squid/squid.conf
squid     2680  2676  0 Aug19 ?        00:00:35 (unlinkd)
root     29182 28215  0 10:52 pts/1    00:00:00 grep squid

squidのpidである「2673」をもとにファイルディスクリプタの設定値を確認。
(★がsquidのファイルディスクリプタ値)

squidファイルディスクリプタの設定値
# cat /proc/2673/limits
Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            10485760             unlimited            bytes
Max core file size        0                    unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             29990                29990                processes
Max open files            1024                 4096                 files # ★
Max locked memory         65536                65536                bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       29990                29990                signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited            us

うーん。デフォルトっぽいな。
なので、ファイルディスクリプタの値を16384に変更する。

squidファイルディスクリプタ値変更
# vi /etc/squid/squid.conf
max_filedescriptors 16384

設定反映のため、squid再起動

squid再起動
# systemctl restart squid

ファイルディスクリプターの値が変更されたことを確認。
squidのpidを確認。今回は「30107」。

squidのpid確認
# ps -ef | grep squid
root     30107     1  0 11:07 ?        00:00:00 squid -f /etc/squid/squid.conf
squid    30109 30107  1 11:07 ?        00:00:00 (squid) -f /etc/squid/squid.conf
squid    30111 30109  0 11:07 ?        00:00:00 (unlinkd)
root     30128 28215  0 11:07 pts/1    00:00:00 grep squid

squidのpidである「30107」をもとにファイルディスクリプタの設定値を確認。
ファイルディスクリプタの値が変更されていることが確認出来た。
(★がsquidのファイルディスクリプタ値)

squidファイルディスクリプタの設定値
# cat /proc/30107/limits
Limit                     Soft Limit           Hard Limit           Units
Max cpu time              unlimited            unlimited            seconds
Max file size             unlimited            unlimited            bytes
Max data size             unlimited            unlimited            bytes
Max stack size            10485760             unlimited            bytes
Max core file size        unlimited            unlimited            bytes
Max resident set          unlimited            unlimited            bytes
Max processes             29990                29990                processes
Max open files            16384                65536                files # ★
Max locked memory         65536                65536                bytes
Max address space         unlimited            unlimited            bytes
Max file locks            unlimited            unlimited            locks
Max pending signals       29990                29990                signals
Max msgqueue size         819200               819200               bytes
Max nice priority         0                    0
Max realtime priority     0                    0
Max realtime timeout      unlimited            unlimited           us

ファイルディスクリプタの値が変更され、ネットワークが遅いのも解消された模様。

MEMO
ファイルディスクリプタの値はOS全体のものとsquidは別にある。混同しないよう注意が必要

squidバージョンによって設定値が異なる

squid.confに設定するパラメーターはsquidのバージョンによって記載方法が異なるので注意が必要。

squid3.1以前
max_filedesc <値>
squid3.1以降
max_filedescriptors  <値>

ithinkit

「WARNING! Your cache is running out of filedescriptors」がcacheログに出力されたら、ファイルディスクリプタの値を変更しましょう!

以上、あいしんくいっとでした。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)