memorandums

日々の生活で問題解決したこと、知ってよかったことなどを自分が思い出すために記録しています。

eclipseディスクアクセス解析(途中経過)

演習システムでeclipseを使うと動作が遅く学生くん達から改善の声があがっていました。そんな声にこたえて学科でメモリを購入して増設したもののまだ遅い。。。解析してくれる気のいい小人さんがいるわけでもないので。。。誰かが調べなければなりません(;_;)


演習システムのクライアントPCはWindowsXPNAS上にプロファイルを保存しています。つまり、My Documentsや個々人のDocument and SettingsなどはすべてNAS上にある構成です。当然ながらデスクトップの情報もNAS上にあることになります。このシステム構成ではMy DocumentsにファイルをDLしたり、デスクトップの配置を変えるたびに、NASへのディスクアクセスが発生することになります(恐らくです)。ちなみにEclipseの個人情報であるworkspaceもNAS上に配置されます。ほぼ100人の学生が同時にEclipseを利用すると。。。単純なネットワークシステムであればルータやNASのディスクにかなりの負荷がかかることが予想できます。もちろん、こうした状況を考慮して負荷分散する設計にはなっているはずです。これらの情報から、Eclipseが遅くなる原因はまずNASへのアクセスにあると考えるのが素直だと思われます。


とりあえずそれを確認するため、マシン単体(マシン自体のローカルアカウントにログイン)でのEclipseの動作と、ネットワークに接続した(ドメインにログインした)ときのEclipseの動作を比較しました。両者に大きな違いはありませんでした。演習中にこの比較実験をすればより確実にわかると思いますが、とりあえず、この結果で差が出なかったということは、多人数の同時利用によるEclipseの動作遅延の原因はNASにあるという仮説は肯定できると思われます。(後々考えるともっと直接的に流れるパケットをつかまえてディスクI/OとネットワークI/Oの相関をとればいいようにも思いますが)


これらについてはシステム設計にも関わるので業者の方にさらなる調査をお願いするしかありません。とりあえず教員個人で来週にでも対処できる方法がないか考えると。。。とりあえず、Eclipseがどの程度、NASによって処理遅延しているか調べるべきだと考えました。

Javaのパフォーマンス解析に使えそうなツールを探しました。見つかったものですぐ利用できそうなのはjconsoleやTPTPなど。ただ、これらはCPUやヒープメモリに関する調査でディスクアクセス(ネットワークアクセス)に関するツールではないようです。もう少し調べるとLinuxのコマンドでiostatなるものが使えそうであることがわかりました。io待ちの状況を見る事ができるそうです。ただし。。。winにはない。cygwinを入れると使えるようなのでとりあえず明日以降、空き時間を見て演習室のマシンにcygwinを入れて調査してみるとします。


とにかく早く対処した。そこで、もう一つの調査事項であるEclipseの設定でディスクアクセスを減らすことができないか?について調べてみることにしました。


現状、学生くん達の演習状況を見ていると、Tomcatサーバを起動するとEclipseが応答なしになったり、ひどい場合はタブを切り替えたりカーソルを移動しただけでも瞬間的に「応答なし」になったりします。ということは、Workbenchを操作してカーソルを移動するなどしたときにEclipseがネットワークにアクセスしてio待ちになっている可能性が考えられます。


Eclipseをソースからコンパイルしてプロファイラを組み込めばいいのかもしれません。(C++ではやったことがあるけどJavaでは経験がない。。。できるかな?)時間切れになったので、ベタですが、とりあえずEclipseを起動してファイルの更新日時を調べ、Eclipseがファイルにアクセスしているタイミングを調べてみました。workspace内のプロジェクトファイルが更新されるタイミングは自明なので、それ以外のファイル(システムファイル)を調べてみました。


一番、頻度よく更新されていたのは「.metadata/.plugins/org.eclipse.core.resources」内のファイル群でした。


その中の.history内のファイル群は特に更新頻度が高い。ここにはエディタ内の編集履歴が保存されているようです。データ量は小さいですが100台で一斉にプログラムを編集すると結構なデータがPC〜NAS間でやりとりされるはずです。この.history等のファイルをローカルディスクに置くか、メモリ上に置けば速くなりそうな気がしますね。。。できるかな?一番簡単なのはworkspaceをローカルディスクであるCドライブに置けばいいのですが。。。ロックしているので再起動すると消えてしまいます。とりあえずCドライブに置いておいて、ネットワークの空きをみてNASに転送するサービスを自作するか。。。ちなみに、これらの設定はEclipseのPreferencesのGeneral->Workspaceとその下のLocal Historyで設定できるようです。ある程度です。設定値と効果のほどは今後、計測したいと思います。


ちなみにのちなみにで。。。調子にのって以下のようにPreferencesのGeneral->Startup and Shutdownで起動時のプラグインのチェックを全て外してeclipseを再起動したら。。。Preferencesが二度と表示されなくなった。。。Preferencesが表示できないと元に戻せない。。。


Eclipseを再インストールしてもダメ。workspapceを新たに作り直せば(正確に言うとworkspace内の.metadataを消してEclipseに作り直させれば)なおります。でも、既存プロジェクトのリンクデータが消えてしまうのは面倒なので調べてみました。探すのに結構時間がかかりましたが、workspace/.metadata/.plugins/org.eclipse.core.runtime/.settings/org.eclipse.ui.workbench.prefs内のPLUGINS_NOT_ACTIVATED_ON_STARTUP=移行にある「org.eclipse.ui」を削除してEclipseを再起動すればPreferencesが表示されるようになります。ああ。。。しんど。でも何でorg.eclipse.uiは消せるようになっているのか。。。?そんな危ないものは選べないようにすればいいじゃん。。。と考えます。EclipseはVSなどの商用ツールとは違いますから安全性より自由度を選択するでしょう。用途として考えるとすれば、ある環境下でPreferencesを表示させたくないとき(いじらせなくないとき)にこのチェックを外す。。。のかもしれませんね。戻すときには、前述の通り、設定ファイルを直接いじればいいわけです。


■10/6追記

もう一つのトライとしてEclipseワークスペースNASに繋げちゃうという手を考えました。個人マシンをもっていきNASワークスペースとして利用してみます。演習中にやってみてEclipseが固まるようならNASの問題。そうじゃないならマシンの問題かもしれません。ちなみに、EclipseワークスペースWindowsの共有フォルダ(smb)に置くためには1つ設定をしなければなりません。以下をeclipse.iniに追記する必要があります。(smbではファイルロックができないのでワークスペースをロックしないことを明示してEclipseを利用する必要があるようです)

  • Dosgi.locking=none