nohupに書き込むプロセスがあり、このプロセスが書き込むストレージが遅い場合、nohupで実行されているプロセスはブロックされますか?たとえば、
プロセスAはnohupで実行されており、コンソールに10行を書き込む必要があります。
nohup.outにこの10行を書き込むには、ディスクストアに2分かかります。 (6行を書き、1分間ディスクを待って停止します。)
残りの行が書き込まれるまで、プロセスAはブロックされますか?
答え1
nohup
モードは、プロセスがI / Oバインドされているかどうかには関係ありません。はい。保存が遅いとプロセスが遅くなることがあります。
プロセスの出力が急増していますが(たとえば、1時間あたり10行)、スループットが「遅い」リポジトリより低い場合は、パイプまたはFIFOに書き込んでから、他の人に遅いリポジトリにコピーすることでこれを改善できます。 )パフォーマンス。プロセス)、出力バーストがパイプのバッファを超えない限り。
mkfifo /tmp/fifo
nohup prog >/tmp/fifo &
cat </tmp/fifo >slow_log_file &
または
nohup prog | buffer -s 16k >slow_log_file &
どこバッファーapt-get install buffer
作成者のブロックを避けるために、大きな内部キューを維持する特別なプログラム(Debianで利用可能)です。
あるいは、ソースコードを制御する場合は、バッファリングを直接実装し、別々のロガープロセスを使用して遅いリポジトリに書き込むこともできます。私はdjbdns(安定性として知られている)がロガープロセスを使用していることを知っています。
答え2
大量のIOを生成する一般的なプロセスなので、ブロックされます。ただし、通常、ファイルシステムブロックはメモリにキャッシュされます。オペレーティングシステムがダーティブロックをディスクに書き込もうとすると、トップ出力のキューが100%に変わることがわかります。