Red Hat Enterprise Linux 6 のカーネル 2.6以降を使用したディストリビューションで ext4 ファイルシステムを利用する場合、I/O バリア (I/O barrier)という仕組みが既定で有効になります。ext3やそれ以外のファイルシステムでもOSの設定によりI/Oバリアを有効にすることが可能です。I/O バリアは、fsync() システムコール実行時にファイルシステムへのデータ書き込み順序を保証する機能で、揮発性の書き込みキャッシュを持つストレージデバイスを利用している場合に有効な機能です。I/O バリアを有効しても多くのアプリケーションには大きな影響が出ませんが、fsync() を多用するアプリケーションや、ファイル書き込みを平行して大量に行うアプリケーションではパフォーマンスへの影響が大きくなります。マシンスペックに依存しますが、fsync() システムコールの処理時間が概ね2~4倍長くなります。
WebOTXではシステムコールの処理時間が長くなることにより、次の影響があります。
- プロセスグループのログ出力に要する時間が長くなる。
プロセスグループのログ出力では、出力同期のためfsync()を利用しています。トレースレベルを6以上(既定値 5)に設定している場合は、アプリケーション実行の都度ログ出力を行うため常に影響します。Javaアプリケーションを利用しプロセスグループ上で障害の発生あるいは予兆検出した場合、スレッドダンプの出力時に影響を受けます。
- JMSでファイルストア利用時に永続処理に要する時間が長くなる。
JMSでファイルストア利用時に、メモリ内の状態とファイルストアを同期させる設定を有効にしていた場合(※)、内部的にfsync()が利用されるため、メッセージの送受信毎に行われる永続処理に影響します。
(※)JMSサーバのwojms.persist.file.sync.enabledプロパティをtrueに設定した場合。既定値は、falseです。