2011/07/29

gfmd接続上限

GEO Gridで運用中のGfarmにアクセスできなくなった.正確には,新しい接続ができなくなったようだった.gfarm-discuss-ja MLに報告したとおりだが(現時点で送ったメールのアーカイブはまだ無いみたい),

% gfdf
libgfarm: [1000059] cannot connect to gfmd at gfmd.local:601, give up: authentication error
libgfarm: [1000017] connecting to gfmd at gfmd.local:601: authentication error

のように,接続ができなくなった.この時の gfmd 側のログは,

Jul 25 17:35:28 gfmd gfmd[4146]: [1000189] accept, Too many open files
Jul 25 17:35:28 gfmd gfmd[4146]: [1000043] (_gfarmfs@10.0.0.130) _gfarmfs: authorize_sharedsecret: local account doesn't exist
Jul 25 17:35:28 gfmd gfmd[4146]: [1000024] auth_sharedsecret: gives up: authentication error
Jul 25 17:35:28 gfmd gfmd[4146]: [1000187] authorize: authentication error
Jul 25 17:35:28 gfmd gfmd[4146]: [1000188] peer_authorize: authentication error
Jul 25 17:35:28 gfmd gfmd[4146]: [1000286] ((null)@(null)) disconnected
Jul 25 17:35:28 gfmd gfmd[4146]: [1000028] auth_sharedsecret: .gfarm_shared_key: gfarm sharedsecret key - key file not exist
Jul 25 17:35:28 gfmd gfmd[4146]: [1000024] auth_sharedsecret: gives up: authentication error
Jul 25 17:35:28 gfmd gfmd[4146]: [1000187] authorize: authentication error
Jul 25 17:35:28 gfmd gfmd[4146]: [1000188] peer_authorize: authentication error
Jul 25 17:35:28 gfmd gfmd[4146]: [1000286] ((null)@(null)) disconnected

こんな感じ.file descriptorが足りなくなったのだろうとは推定できるが,何がどうかは分からなかった.ともかく,gfmdを再起動して復旧したが,その後,状況を見たら,

% grep ESTABLISHED /var/log/local0 |wc -l
    8927
なので,かなり接続があるのは間違いない.

上限値はというと,/etc/init.d/gfmdで設定されている

# increase the maximum number of open file descriptors
ulimit -n 16384 2> /dev/null

ということなので,こいつが枯渇したのでしょう.ソースレベルでも,

GFMD_CONNECTION_LIMIT 65536

という上限が設定されているそうなので,60,000くらいに設定しようかと思う(この機材は,gfmd専用機).

最後に,gfmdの最大コネクション数は,


(1) クライアント1プロセスあたり: gfsd_connection_cache(default 16) + 1 = 17
(2) ファイルシステムノード1台あたり: 2+全ファイルシステムノード数

の合計で求められる.(2)は,version 2.4.1以降ということなので,2.3.2で運用しているうちとしては,(1)だけを考えれば良い.ここで,クライアント1プロセスは,fuseのマウントの数になるわけですが,1ノード辺り60マウントくらいしているので,
17 (connects / clients) x 60 (clients / nodes) x 30 (nodes) = 30,600
なので,軽く上限超えちゃうわけです.あくまでもgfsd_connection_cacheがフルに使われての数字なので,実際にはアクセスがあまりないfuse mount pointからは17もセッションがはられるわけではないです.一方で,アクセスが増えれば,gfmdとのコネクションも増えるので,ある日突然この症状となってしまいます.