起動が遅くなったプログラムの調査(.NET/SQLServer)

社内で利用しているのソフトの起動が遅くなった。ソースや詳細な仕様は手元になくSQLServer+.NETということと、サーバーへのアクセス情報だけ。

最初に表示される軽量なログイン画面の表示が遅い。ただ、ソフトを終了後、すぐに起動すると遅くならなかったりもする、維持が数秒と短いのでDBではなく、SMB+LTLMあたりが怪しい。

Process Monitor

https://learn.microsoft.com/ja-jp/sysinternals/downloads/procmon

Filter>Filter
ProcessName | Contains | xxx | Include
Add>OK

これでどのIOが遅いか明確につかめる場合もあるけど、今回はプログラムの中の処理で時間がかかっているようだった。

ILSpy

https://github.com/icsharpcode/ILSpy/releases

プログラムを開いたらエントリポイントを探す。
起動プロセスの中で、社内共有フォルダ(IPアドレス指定)にアクセス、SQLServerに接続をしていることがわかった。

これで名前解決は関係ないと分かる。

TCPView

https://learn.microsoft.com/ja-jp/sysinternals/downloads/tcpview

検索ボックスにプログラム名(または接続先IPアドレス)を入力し、プログラムを起動。接続が確立されるのはDBのみ。またタイミングからやはり共有フォルダが怪しいとなる。

どのタイミングで時間がかかっているか見づらいのでWiresharkを利用。

Wireshark

https://www.wireshark.org/

キャプチャ>開始
フィルタに
ip.src==192.168.1.xxx && ip.dst==192.168.2.xxx || ip.dst==192.168.1.xxx
このように入力した。

これで共有フォルダにアクセスにしているときが遅いことが分かった。

その他

その他に実施したこと。

・クライアント/サーバーのFirewall停止→効果無し。
・クライアント/サーバーで修復系コマンド実施→効果無し。
・該当のアドレスにpingを送信して時間確認。
・該当のアドレスのSQLSserverに接続して時間確認。
・該当のアドレスへの送信をFirewallでふさぐ→効果無し。
・ネットワーク系のキャッシュリセット→効果無し。
・ネットワーク セキュリティ: LAN Manager 認証レベルを変更→効果無し。
・ログ確認(eventvwr)
アプリケーションとサービスログ>Microsoft>Windows>SMBClient
アプリケーションとサービスログ>Microsoft>Windows>NTLM

最終的に、

gpedit.msc>コンピュータの構成>管理用テンプレート>ネットワーク>Lanmanワークステーション>暗号化が必要:無効

で解決することが判明した。