2016/02/14
いや、まいりました。
数日前からホストOSのメモリが減少していて枯渇しそうな勢い。
ホストOSにログインしてみると、なにやら cron のプロセスが大量に溜まっている。
対象のホストの様子を伺おうとXenCenterで接続しようとしたら、接続しにいったまま帰ってこない。
結果、XenCenterが対象のホストに接続できない。
「うーむ、これは、ホストを再起動しないとダメなやつか?」
ということで、どんなゲストOSが起動しているか確認すべく、ホストOSにログインして、コンソールで以下を実行。
# xe vm-list
しかし、このコマンドも結果が返らない…。
泣きそうになりながらググっていると、どうも、xenのapiが死んでいるっぽい情報を得たため、以下を実行。
ゲストOSに影響がないかドキドキしましたが、大丈夫です。
# xe-toolstack-restart
異常が発生しているからだと思うのだが、再起動に結構時間はかかったものの、プロンプトが返り、どうやら再起動は実行された模様。
再度、xe vm-list を実行したところ、応答が返るように。
「おお!直った!?よーし、XenCenterも繋がるかな」
と、ウキウキして、XenCenter で接続を試みたところ、以下のようなメッセージが出て、もう完全に接続できていない模様。
Unable to connect to server, Check that XenServer is configured correctly on ‘xxx.xxx.xxx.xxx’ and try again
「おいおいおいおい、こっちはむしろ悪化した…?」
xe vm-list が応答を返すようになったわけなので、api は復活した気配なのに、何故にそこまで接続を拒否するのか…。
さらに情報を得るべくググっていると、以下も必要かも、ということになり実行。
これも、ゲストOSには影響はありません。
# service xapi restart
しかし、解消せず…。
再度、以下を実行しても事態は変わらず…。
# xe-toolstack-restart
「最悪、xe でゲストOSを止めて、ホストOSの再起動しかないか…」
と思いながらも、そうそう簡単にゲストOSを停止することもできないので、半べそをかきながらググっていると新たな情報が。
「タスクがなんか詰まってんじゃね?」
ということで、以下を実行。
# xe task-list
すると以下のような結果が。
uuid ( RO) : 835b8a3e-237a-0a6f-726d-44c0b719b10e
name-label ( RO): dbsync (update_env)
name-description ( RO):
status ( RO): pending
progress ( RO): 0.000
正常に動作しているホストOSでは返らない結果。
「このタスクをキュンセルすればいいか?」
と思ったものの、容易にキャンセルしてよいタスクなのかわからず、さらにググっていると以下の情報が。
「 dbsync (update_env) がどこかでハングアップしてんじゃね?」
そして、これを確認するために以下を実行してステータスを確認せよとのこと。
# systemctl status message-switch
「起動してない場合は起動せよ」ということでしたが、結果が以下。
● message-switch.service – LSB: Start up the xapi toolstack message switch
Loaded: loaded (/etc/rc.d/init.d/message-switch)
Drop-In: /etc/systemd/system/message-switch.service.d
└─slice.conf
Active: active (exited) since Fri 2017-09-29 12:45:57 JST; 4 years 10 months ago
Docs: man:systemd-sysv-generator(8)
Process: 1990 ExecStart=/etc/rc.d/init.d/message-switch start (code=exited, status=0/SUCCESS)
「うーん、active だ…」
しかし、ここで、念のため再起動を敢行。
# systemctl restart message-switch
すると、なんと、active は active でも状態が変化!
active (running) に!
● message-switch.service – LSB: Start up the xapi toolstack message switch
Loaded: loaded (/etc/rc.d/init.d/message-switch)
Drop-In: /etc/systemd/system/message-switch.service.d
└─slice.conf
Active: active (running) since Sat 2022-08-06 15:42:48 JST; 2s ago
Docs: man:systemd-sysv-generator(8)
Process: 3110 ExecStop=/etc/rc.d/init.d/message-switch stop (code=exited, status=0/SUCCESS)
Process: 3117 ExecStart=/etc/rc.d/init.d/message-switch start (code=exited, status=0/SUCCESS)
「おお!」
そして、xe task-list を実行したら、pending になっていた
dbsync (update_env) のタスクが消えている。
そして、以下を実行。
# xe-toolstack-restart
恐る恐る XenCenter での接続を試みると…
「きたー!接続できたー!」
見事に復旧しました!
調査の過程でわかったんですが、/var/log/kern.log に以下のような記録があり、数日前に oom-killer が発動して、xcp-rrdd というプロセスが kill されたことが原因のよう。
Out of memory: Kill process 2396 (xcp-rrdd) score 519 or sacrifice child
xcp-rrdd というプロセスの詳細は調べていませんが、これが kill されたことで api が正しく動作しなくなり、その影響でいろいろと(cronのタスクがやたら発生していたこと等も)不具合が発生していたのでしょう。
とにかく、これで問題は解消しました。
あーよかった。
どなたかのお役に立てれば幸いです。