MacとJavaと映画と


最近のエントリー


最近のレスポンス
Re: それでも僕はやっていない
確かに、ラストの落としどころは良いですね...

Re: それでも僕はやっていない
ボクもこないだ観たよ~。 いや~、怖いね、満員電車。 ラストシーンが好きだったね~。小日向文世...

Re: 帯状疱疹
おぉ、聞いたことないけれども何かとかかっ...

Re: 帯状疱疹
家のカミサンもなったことがあります。 早くよくなるといいですね。

Re: 帯状疱疹
うーん、仲間がいると思うと気が休まります...

Re: 帯状疱疹
聞いたことなかったですけど、結構かかる人...

Re: 帯状疱疹
私もかかったことあるんでわかりますが,結...

Re: 帯状疱疹
ご愁傷様です。早くよくなられることを願っ...

Re: 麗しのサブリナ
やっぱりヘップバーンはいいですねー

Re: 麗しのサブリナ
ひさしぶりに侍ズムを開いたら、私の入り込...
2月 2006
    1  2  3  4 
 5  6  7  8  9  10  11 
 12  13  14  15  16  17  18 
 19  20  21  22  23  24  25 
 26  27  28     
1  |  今日  |  3





はてなブックマーク数

あわせて読みたい


follow yusukey at http://twitter.com


Javaベースのblogwareに乗り替えた一番の理由はパフォーマンス。
Pebbleはそのシンプルなアーキテクチャが幸いしてか、ファイルベースのリポジトリにも関わらずかなりサクサク。
でも、なぜかファイルをアップロードする画面の表示がめっちゃめっちゃ遅い!

こんなときはもちろんスレッドダンプをとってで解析でございます。
まずはファイルアップロード画面に対してペケペケっとリロード攻撃。
WLSが「うーん」とがんばっている間に kill -3 [プロセスID]を数回(WindowsならCtrl+Break)。

まずテーブル表示はこれ。

実行スレッド7,8,10ががんばっていることがわかる。
試しにスレッド7が何をしているのか時系列表示。


どのスレッドもだいたい同じで、ViewFilesAction.java を起点として FileManager ってのがなにやらループ、または再帰処理していることが読み取れた。
ソースを確認してみると、どうやら files,images ディレクトリ配下のファイルサイズを計算しているらしい。
この計算結果は currentUsage という名前で request に格納され、表示するのは viewFiles.jsp でこんなかんじ。

    <c:if test="${pebbleProperties.fileUploadQuota > -1}">
      You are using <fmt:formatNumber value="${currentUsage}" type="number" /> KB of
      your <fmt:formatNumber value="${pebbleProperties.fileUploadQuota}" type="number" /> KB quota, which is shared between
      all of your images, files and theme.
    </c:if>
要するに、クオータ(ディスク使用量制限)が有効になっている場合にのみ使われるってこと。
今回 MovableType から移行したファイルがたくさんあるので特にパフォーマンスに影響したみたい。あと、"root"っていうナゾのリクエスト属性も同じように計算してる。
これらは必要のあるときだけ計算すれば良いでしょうということで、潰したらものすごく高速になった。
これは PEB-302 として報告。
PEB-302: bad performance with complex directory structure

さらにディレクトリの容量表示すら必要なければFileManger.javaもいじっちゃえば良い。この修正はさすがに取り込んでくれないだろうけど適用したらめちゃ速っ!
--- pebble-core/src/pebble/blog/FileManager.java  2005-01-02 01:46:29.0 -0800     1.16
+++ pebble-core/src/pebble/blog/FileManager.java  2006-02-03 22:59:14.0 -0800
@@ -106,17 +106,18 @@
     if (file.exists()) {
       if (file.isDirectory()) {
         metaData.setDirectory(true);
-        try {
-          List files = getFiles(metaData, true);
-          long size = 0;
-          Iterator it = files.iterator();
-          while (it.hasNext()) {
-            size += ((FileMetaData)it.next()).getSize();
-          }
-          metaData.setSize(size);
-        } catch (IllegalFileAccessException ifae) {
-          // do nothing
-        }
+//        try {
+//          List files = getFiles(metaData, true);
+//          long size = 0;
+//          Iterator it = files.iterator();
+//          while (it.hasNext()) {
+//            size += ((FileMetaData)it.next()).getSize();
+//          }
+//          metaData.setSize(size);
+//        } catch (IllegalFileAccessException ifae) {
+//          // do nothing
+//        }
+        metaData.setSize(0);
       } else {
         metaData.setSize(file.length());
       }

タグ : , ,



コメント追加

タイトル
本文
HTML : b, i, blockquote, br, p, pre, a href="", ul, ol, li
名前
E-mail
Webサイト
保存しますか? はい  いいえ 

E-mailは公開されません, このエントリーの新規コメント通知が必要なら記入します。(解除可能)

トラックバックURL http://yusuke.homeip.net/diary/.action?entry=1139035542413