以下のような条件・環境でプログラムを動かしています。

WindowsXP
LANDisk IOData HDL F series 250G,320G
Java プログラム JDK 1.5.0で作成したもの

Javaプログラムは概略以下のような動作をします。
・多数のファイルをR/Wする。Wは一ファイルのものもあり。
・一時にopenするファイルは一つのみ。
・ファイルのCloseはきちんとしている。
・ガベージコレクションを定期的に行っている。だいたいファイルのRead数百回ごと。

そして他のマシンからLANDiskへのアクセスもあり、それなりに多い。

これで次のような現象が発生する。
最初は、R/Wの速度が速い(←しかしLocalDiskよりはかなり遅い)、しかし数千(?)ファイルR/W後は、R/Wの速度が非常に遅くなる。体感的には数十倍の時間がかかる。いくつかのプログラムがありますが、どれも同じような現象が発生します。

R/Wの速度が遅くなる原因はわかりますでしょうか。OS、LANDisk、Javaプログラムのどれに原因がありますか?対策は?

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/03/15 12:28:51
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:russian-blue No.1

回答回数36ベストアンサー獲得回数0

ポイント50pt

LANDISKの中身はLinuxが載っている。

LANDISKが原因では?

最初はメモリー上のキャシュで処理するので

速い。

直ぐにメモリが足りなくなり。ジャーナル処理

kupdateの書き込みタイミングで止まったり

、書き込みが完了しないので処理が間に合わ

なくなり遅くなる。

ファイルも沢山作るとディレクトリーが

キャシュされ空きメモリー減少する。

CPU ARM9コア/162MHz 64MバイトRAM

http://plusd.itmedia.co.jp/pcupdate/articles/0602/22/news064.htm...

http://landisk.kororo.jp/debian/different.php

対策なのかな?

(1)1つのフォルダーに沢山ファイルを作らない。

(2)ウイルス対策ソフトを一時的にとめてみる

id:keii-i No.2

回答回数206ベストアンサー獲得回数4

ポイント50pt

要因はいくつか考えられます。

まず、LANDISKでは、Windowsクライアント向けのファイルサービスに

SMBを使っていますので、XP側に下記の問題があるかも知れません。

http://support.microsoft.com/kb/814112/

これでも解決しない場合ですが、今までいくつかのLAN-HDDものを使って

きた経験では、同時にハンドリングするファイル数が500個を超えるあたり

から、いきなり時間がかかるようになります。おそらくは、LAN-HDDのOS

(Unix系列)のファイルシステムの問題だとは思うのですが…

プログラム側で、一度の処理を500ファイル程度に制限するしてみては

いかがでしょうか? あるいは、クライアントのXP側のファイルバッファを

大きくするかですが…

id:ikg No.3

回答回数4ベストアンサー獲得回数0

ポイント50pt

こういった性能問題の場合、

GCが解放されているメモリのサイズが少なく、

Full GCを頻発させるものの、

処理を継続するために必要が空きメモリが一向に確保できず

処理が停滞する

という事が原因であることが多いと思います。


未確認であれば

GCを定期的に行っている、とのことですが、

十分に解放できているか確認するのが良いと思います。


もし上記のことが原因である場合、

VMに割り当てるメモリの量を増やすのが手っ取り早い方法です。

それでは解決しない場合には、

GCで解放されるメモリの量が増えるように

変数のスコープ、初期化(データ参照の放棄)タイミングを

見直すか、または、一定のデータ量ごとに処理を行うように

ロジックを変更する必要があると思います。

id:gzmgzm

いずれも貴重なご回答ありがとうございます。

言い忘れました。

Javaは -mx1024Mで起動。←heap maxが1024M。

マシンはメモリ256M,768M,1Gで実行。

タスクマネージャで見るとメモリは500M程度を消費(←全体で)

256Mの場合も、スラッシングはおきていないようです。

ご回答を参考に改良します。ありがとうございました。

2007/03/15 12:25:35
  • id:gzmgzm
    質問者です。いまさらですが、もう少し現象が分かりました。
    スイッチングハブの電源を入れなおすと、かなり改善します。
    多くのプログラムは、IOエラーが発生すると、それを無視し、しばらくWaitして、次のファイルを処理するようになっています。それらのプログラムは、すべてのファイルを処理することが必須ではないので、そのようにしています。
    ということで、上記のようなプログラムでは、遅くなってくれば、スイッチングハブの電源を入れなおすという原始的な方法で対処しています。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません