1

Apache FOPを使用して、多くのXMLをAFPおよびPDFに変換します。現在の負荷は、HP-UXシステムでの実行ごとに約25kファイルになります。生産者/消費者方式でFOP変換を初期化およびトリガーするために使用される合計8つのスレッドがあります。最近、変換中に複数の障害が発生し、検索すると、次のような一般的なFOPエラーが発生しました。

**ERROR,2460364,FOToPDF_Thread_11,FOP Exception, something.pdf,Failed to resolve font with embed-url './Fonts/arial.ttf'** 

または、ファイルが適切な権限で無傷であるにもかかわらず、フォントメトリックファイルを読み込めないというエラーが発生します。他の多くのPDFが生成されるため、これが問題になることはありません。

また、次のようになります。

**java.io.FileNotFoundException: /PDF/20130111130002/something.pdf (Too many open files (errno:24))**

処理中のログとボリュームから判断すると、これはFOPの問題のように見えます。私は、FOPが過去にフォントファイルでこの問題を抱えていたことを読みました。Apacheが各フォントファイルを複数回開いてハンドルを閉じなかったために、多数のファイルが開いた場合があります。これは修正されるはずでしたが、それでも解決しない場合は、Apacheリストに投稿する以外に、これに対する適切で迅速な解決策は何でしょうか。

プロセスごとのオープンファイル記述子のHP-UXmaxfiles制限を2048を超えて増やすことはできますか?それは役に立ちますか?他に何か提案はありますか?

4

2 に答える 2

2

FOP ソース コードをチェックインしました。True Type フォントを読み取るために使用される FontFileReader という名前のクラスがあります。このクラスには、次の 2 つのコンストラクターがあります。

/**
 * Constructor
 *
 * @param fileName filename to read
 * @throws IOException In case of an I/O problem
 */

public FontFileReader(String fileName) throws IOException {
    final File f = new File(fileName);
    InputStream in = new java.io.FileInputStream(f);
    try {
        init(in);
    } finally {
        in.close();
    }
}

/**
* Constructor
*
* @param in InputStream to read from
* @throws IOException In case of an I/O problem
*/
public FontFileReader(InputStream in) throws IOException {
    init(in);
}

上記の 2 番目のコンストラクターでわかるように、入力ストリームは閉じられていませんが、上記のコンストラクターでは明示的に閉じられています。

ttf フォントをメモリにロードする TTFFontLoader という別のクラスがあります。このクラスは 2 番目のコンストラクター (強調表示) を使用してフォント ファイルを読み取るため、ストリームが開いたままになり、プロセス全体のオープン制限に達しているに違いないと思います。ファイルがハンドルされ、「開いているファイルが多すぎます」というエラーが発生します。

この問題は、FOP コードの現在のトランク バージョンで FOP フォント サブシステムがリファクタリングされてから解決されました。

于 2013-01-28T11:33:53.340 に答える
1

Apache FOP プロジェクトの関連する問題は次のとおりです。

https://issues.apache.org/jira/browse/FOP-2189

そこでコメントしたように、FOP 1.0 で開いているファイル ハンドルを特定できませんでした。InputStream 引数を取る FontFileReader のコンストラクターは実際にはそれを閉じていませんが、呼び出し元 (ストリームを作成した人) が閉じています。

http://svn.apache.org/repos/asf/xmlgraphics/fop/tags/fop-1_0/src/java/org/apache/fop/fonts/truetype/TTFFontLoader.java

于 2013-02-27T21:00:46.803 に答える