Copper PDFの高速処理の秘密は、PDFのように内容が表示順になっていないデータを直列化し、再構築する独自のPDF出力プログラムと通信方式です。処理能力が非常に高いことから1台だけのサーバーでもほとんどの用途には十分ですが、生成途中のPDFを直列化してソケット通信でドライバに渡すため、負荷分散が容易であり、ハードウェアを増設することでどのような過酷な運用にも耐えられるのが特徴です!
このページではCopper PDF 2.1.0のパフォーマンス測定結果を公開しています。使用した環境は次の通りです。
DELL PowerEdge 840
CPU: Intel Xeon X3230 2.66GHz/8MB L2キャッシュ/1.066MHzFSB)
メモリ: 4GB
OS: Debian etch 4.0r6 (カーネル2.6.26 amd64)
Java: Sun JDK 1.5.0_14 64-Bit Server VM
2009年1月現在、30万円未満で購入できる安価なサーバーです。
申請書の出力
某自治体の保有個人情報開示請求書(大抵の自治体にある申請書類です)を10のスレッドで同時アクセスしてそれぞれ100回、合計1000回出力しました。
対象文書 / 処理結果
接続方法 | 通常のドライバ | HTTP/RESTインターフェース |
---|---|---|
処理時間 | 12406ms | 17006ms |
平均レスポンス時間 | 119.1ms | 161.7ms |
スループット(処理能力) | 80.6/s | 58.2/s |
10人の市民が同時アクセスして毎秒50枚以上の申請書を作成するというのは、まずあり得ないような高負荷ですが、0.1~0.2秒程度で結果を返します。マルチスレッドに対応しているため、特にマルチコアCPUの環境では同時アクセス数が増えてもレスポンスタイムはあまり変わりません。
Copper PDF 2.1からサポートされたHTTP/RESTインターフェースでは、30%程度の速度低下がありますが、実用上は全く問題ありません。
520ページの英文仕様書の出力
W3CのXSL 1.1のドキュメント(図も含まれる大きな技術文書)を1つのスレッドで5回変換しました。
対象文書 / 処理結果
処理時間 | ページ/秒 |
---|---|
28775ms | 18.07 |
5267ms | 98.73 |
4675ms | 111.2 |
4682ms | 111.1 |
4505ms | 115.4 |
1回目はウォームアップ(JavaのJITコンパイラやフォントキャッシュ)のために若干時間がかかりますが、2回目以降は安定して約100ページを1秒で返すというパフォーマンスを発揮しています。
1474ページの和文法令文書の出力
租税特別措置法(日本で一番長文と言われる法律)を1つのスレッドで5回変換しました。
対象文書 / 処理結果
処理時間 | ページ/秒 |
---|---|
9282ms | 158.8 |
5762ms | 255.8 |
4932ms | 298.9 |
4888ms | 301.6 |
4892ms | 301.3 |
図が含まれない法令文書の場合は非常に高速で処理できます。ウォームアップが終わって安定稼動に入った状態であれば200ページの出力に1秒かかりません。
また、処理途中のPDFを直列化してドライバに渡した後、サーバー側では逐次データを破棄するため、無駄にシステムのリソースを消費することがなく、このような長大なPDFでもストレスなく出力できます。