treedown’s Report

システム管理者に巻き起こる様々な事象を読者の貴方へ報告するブログです。会社でも家庭でも"システム"に携わるすべての方の共感を目指しています。

※https化しました。その影響でしばらくリンク切れなどがあるかもしれませんが徐々に修正していきます。 リンク切れなどのお気づきの点がございましたらコメントなどでご指摘いただけますと助かります。

sambaサーバアクセスが遅い原因を調べた

少し前の話になるのですが、sambaサーバにアクセス出来なくなったという連絡を受けて対処することになりました。そのときの内容をご報告です。

簡単に状況

Windows10サポート終了前のことです。ある日の午後にsambaサーバへのショートカットが反応しなくなったという連絡を受けて、PCを確認することになりました。午前中にはアクセス出来ていたとのこと。またWindows10もWindows11も両方アクセス出来たり出来なかったりと規則性なく発生しているようです。OSの差はないエラーとなっています。

エラーのPCを確認すると、前回<sambaサーバにホスト名でアクセスできなくなったので対処 - treedown’s Report>のようなエラーが表示されるわけではなくエクスプローラが応答なしとなっているかのようなアクセス遅延の(共有フォルダとか、共有フォルダ内のファイルのショートカットで起動すると、対応するアプリケーションがすごく起動に時間が掛かって遅い)ようでした。

簡単に調査

前回同様に疎通確認から。

ping %COMPUTERNAME%

と実行してホスト名宛ての疎通確認はできました。


※画像はテスト環境で後から取得した参考画面です。

これで名前解決なども含めて通信の問題はないと判断していますが、前回対処したので全てIPv4でしっかりアクセスしているのは確認出来ました。つまり前回と違う要因で発生しているようです。

ポートへのアクセスでも、


※画像はテスト環境で後から取得した参考画面です。

画面上にはエラーなくサーバアクセスへの到達を示す画面が表示されました。

午前中までアクセスできていたので、各種設定などは問題ないと判断できます。特にアップデートなども動作していないので、自動的に環境が変わったという可能性も低いと考えました。

前回と違って、応答が遅いsambaサーバ側でなにかありそうな感じがします。

sambaサーバを調査する

sambaサーバの負荷が上がっているのかなぁと考えて、sambaサーバ上でプロセスの確認をしてみました。
以前<rsyncプロセスが終わらない=障害? - treedown’s Report>rsyncのジョブが終了前に次のrsyncジョブが実行されたことにより、sambaサーバの負荷が上昇したということがありました。今回もそういった負荷が掛かるプロセスが存在するかもしれません。

topコマンドで確認したところ、

ん?

ユーザの一人のIDが所有者のsmbdプロセスと共に「updatedb.plocat」という名称のプロセスがサーバのCPU処理で負荷を上げているようです。これはユーザプロセスでsambaユーザのユーザ名で起動されているプロセスのようです。

調べたところ「updatedb.plocat」は検索インデックス作成の処理を意味するプロセスでした。だとすると、夜間でなくて何で今?

ユーザに確認

上記のsmbdプロセスのユーザ名が関係していると思ったので、そのユーザに直接確認して見ることにしました。

確認したところ、

Windows11PCから共有フォルダ内を検索している。

という回答を得ました。どれくらいやりました?と聞いたところ、かれこれ数時間前から実行しているのだが、目当てのファイルが見つからないので、現在に至るまで検索をしっぱなし、とのことでした。

なるほど。

推測を含めた問題の要因

sambaサーバの応答遅延が起きたステップをまとめてみました。

  1. Windows11から共有フォルダを対象に検索を仕掛ける
  2. 共有フォルダ内に大量のファイルがあれば、ファイル1つ1つを調べて検索対象に該当するか確認
  3. sambaサーバ上では「インデックスがない Linux 側の共有フォルダ」なので、updatedb.plocateが動作して検索に対するインデックス作成処理が動作した
  4. 対象ユーザのプロセスのsmbdプロセスを起点としたupdatedb.plocateプロセスがsambaサーバを遅くした

対処:ユーザの検索を止める

単純ですが、このユーザのWindows11から、共有フォルダ内を検索していた処理を停止し、Windows11が共有フォルダを検索しなくなったところ、sambaサーバの応答遅延の問題がスッと収まりました。

やはり、検索によってsambaサーバが重くなっていたのが要因だったようです。

今回はtopコマンドのプロセスからユーザを特定することができましたが、smbstatusコマンドでも同様にアクセス確認ができそうなので、次回同様のことが発生した場合にはsmbstatusコマンドの確認もしてみようと思います。

あと、共有フォルダのファイル数が膨大になると、一ユーザの検索がsambaサーバ全体の動作に影響するということもあるので、この対策として検索用の仕組みを何か導入してみようかなと思いました。