2016-04-29 11 views
0

私はjavaでアプリケーションを作成し、それをunixサーバーにデプロイしました。私は別のユーザーまたは単一のユーザー別のセッションを使用して、私のjarファイルの複数のインスタンスを実行する場合 私は私のアプリでログを実装していると、ログがファイルに生成されているがX.log.txt2つの同時プロセスからのログ

を言う:
X.log.txtの私のログのチャンスがあります混ざる?
またはそれはFCFSの方法であろうか?


例:P1とP2をJavaアプリケーションを呼び出してログを生成している2つのプロセスとします。

P1とP2は、同時に個々のログをX.log.txtに書き込んでいます。この声明は本当ですか?それとも、CPUスケジューリングアルゴリズム(FCFS、SJFなど)に完全に基づいていますか?

私がタイムスタンプを使用しない場合でも、私のためにうまく動作します。 私はそれらを実行しているときに、次々にログが生成されます。特定のインスタンスについては、すべてのログがファイルに書き込まれ、次に次のインスタンスに書き込まれます。私の質問はまだ開いていますが、それはすべて私たちのプロセッサがジョブを処理するために書かれた方法に基づいているのでしょうか?

答えて

0

2つのプロセスが同じログファイルに書き込んでいる場合、データはランダムに破損します。あなたは途中で線を引っ張って、他のログからのデータで仕上げます。 OSによっては、ファイルのさまざまな場所でバイナリゼロの良い塊で終わることもできます(そして、いくつかのOSでは、同時に2つの場所から同じファイルに書き込むことができません)。

ファイルを別々に書き込み、いくつかのサードパーティのツールを使用してそれらを結合/ブラウズして、タイムスタンプ順のビューを取得します。

+0

複数のソースからの完全なログメッセージを受け付けるログプロセスにログを送信し、単一のログファイルに書き込みます。 (OPはUnixシステム上にあるので、 'syslog'と同様です)。 –

0

両方のプロセスが同じディレクトリとファイルパスに書き込まれている場合は、奇妙な動作が発生します。実装によっては、両方のアプリケーションが同時にファイルに書き込むか、または一方のアプリケーションが他方のアプリケーションで書き込みを全くブロックすることになります。

私の提案は、実行時にログファイルの名前を生成し、タイムスタンプまたはPID(プロセスID)のようなユニークなものを追加することですので、これ以上の競合はありません。

X.log.[PID].txtまたはX.log.[TIMESTAMP].txt

注:名前の衝突を避けるために、タイムスタンプ(秒またはナノ秒)で十分に低い解像度を使用する必要があります。

関連する問題