質問
⚠️ この事例は公開されてから1年以上経過しています。 情報が古い可能性がありますので、ご注意ください。
🕓 事例公開日 : 2024-09-10
【背景】
即時バックアップを実行したところ、処理に長時間かかった後、最終的に失敗してしまった。1. 事象
エラーメッセージ・スタックトレース:
Caused by: java.io.IOException: No space left on deviceat java.base/java.io.FileOutputStream.writeBytes(Native Method)at java.base/java.io.FileOutputStream.write(FileOutputStream.java:354)at java.base/java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:81)at java.base/java.io.BufferedOutputStream.write(BufferedOutputStream.java:127)at jp.co.intra_mart.common.aid.jdk.java.io.IOUtil.transfer(IOUtil.java:111)at jp.co.intra_mart.system.service.provider.StorageFileUpdater.copyFile(StorageFileUpdater.java:103)at jp.co.intra_mart.system.service.provider.SystemStorageFileUpdater.copySystemStorage(SystemStorageFileUpdater.java:92)
症状の説明:
即時バックアップ処理が通常より長時間実行された後、異常終了した。APサーバのディスク容量を確認したところ空き容量がゼロになっていたため、ログファイルを削除したところバックアップが正常に完了するようになった。2. 発生条件
APサーバのディスク容量が不足している状態で即時バックアップを実行した場合に発生する。回答
1. 原因
技術的な原因:
APサーバのディスク容量が枯渇していたため、バックアップ処理後のintra-mart起動時にファイル書き込みができず、起動に失敗しました。技術的要因の分析:
・ディスク容量の枯渇:APサーバの空き容量が0バイトになっていた → ファイル書き込み処理が実行できない状態・バックアップ処理の仕様:バックアップ取得後にintra-martの起動確認を実施する → 起動失敗時はバックアップ処理全体が異常終了と判定される
・ファイル出力の失敗:java.io.IOExceptionが発生 → intra-martのWebアプリケーション起動が中断
・ログファイルの蓄積:大量のログファイルがディスクを圧迫 → 新規ファイル作成に必要な空き容量が確保できない
根本的な要因:
APサーバのディスク容量管理が不十分で、ログファイルの蓄積により空き容量が枯渇したことが根本原因です。2. 対応方法
根本解決方法:
1. 定期的なログファイルの削除やローテーション設定を実施し、ディスク容量を適切に管理する2. ディスク使用量の監視を行う
3. 不要なファイルやキャッシュを定期的にクリーンアップする運用を確立する
暫定対処方法:
1. APサーバにアクセスし、不要なログファイルを削除して空き容量を確保する2. 即時バックアップを再実行し、正常終了することを確認する
3. 原因究明に至るまでの調査方法
1. バックアップ異常終了の発生時刻を特定する2. APサーバのディスク使用状況を確認し、空き容量が不足していることを発見する
3. Resin JVMログ(/opt/accel-mart/logs/resin/jvm-app-0.log)を確認し、「No space left on device」エラーを特定する
4. エラー発生時のスタックトレースから、ファイル書き込み処理の失敗がintra-mart起動失敗の原因であることを確認する
5. バックアップ処理の仕様として、intra-mart起動確認が含まれることを確認し、起動失敗がバックアップ異常終了につながったことを特定する