以 nohup 模式写入慢速存储会阻塞进程吗?

以 nohup 模式写入慢速存储会阻塞进程吗?

如果我有一个进程写入 nohup 并且它写入的存储很慢,它会阻止在 nohup 中运行的进程吗?例如:

进程A正在nohup中运行,它需要向控制台写入10行

磁盘存储需要 2 分钟才能将这 10 行写入 nohup.out (它写入了 6 行,然后卡住了一分钟等待磁盘)

进程A是否被阻塞,直到剩余的行被写入为止?

答案1

nohupmode 与进程是否受 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 &

在哪里缓冲是一个特殊的程序(在 Debian 上可用apt-get install buffer),它维护一个大的内部队列以避免阻塞写入器。

或者,如果您控制源代码,您可以自己实现缓冲,并且可能使用单独的记录器进程写入慢速存储。我知道 djbdns(以其稳定性而闻名)使用记录器进程。

答案2

作为一个产生大量IO的正常进程,它会被阻塞。但通常文件系统块缓存在内存中。当操作系统尝试将脏块写入磁盘时,您将看到顶部输出中的等待列变为 100%

相关内容