传输 FIFO 文件时“nc”使用 ~100% CPU

传输 FIFO 文件时“nc”使用 ~100% CPU

在始终连接的服务器上,我在 crontab 中使用它:

@reboot nc -k -l 1337 < /tmp/fifo.fifo

在并不总是在网络上或打开的客户端上,我使用以下命令:

nc -d $IP_OF_SERVER 1337 > /tmp/fifo.fifo & $SOME_COMMAND

服务器始终侦听指定端口上的连接(感谢 -k 参数),客户端仅在需要时连接到服务器。

我将其用于 MPD 及其 FIFO 可视化工具。 MPD 在远程主机上运行,​​但我的 MPD 客户端 (ncmpcpp) 在本地运行。

这是本地主机上 ncmpcpp 配置的重要部分:

mpd_host = "$IP_OF_SERVER"
visualizer_fifo_path = "/tmp/fifo.fifo"

这是远程服务器上 mpd 配置的重要部分:

audio_output {
        […]
        path    "/tmp/fifo.fifo"
        […]
}

在我的本地计算机上运行“nc”命令似乎使用了大量资源……~我的 CPU 性能的 100%。

中央处理器

活力

有什么想法问题出在哪里吗?或者如果这是正常的,我将如何改善整个情况?

不幸的是,不可能只为 Visualizer_fifo_path 指定网络路径,例如:

visualizer_fifo_path = "$IP_OF_SERVER:/tmp/fifo.fifo"

并且也不可能通过 NFS 挂载远程主机,然后使用通过 NFS 挂载的 FIFO。

这是 dtruss 的一些输出:

$ >> ps aux | grep 1337
user            96823  95,2  0,0  2433292    576 s003  R+   12:16PM  37:27.77 nc -d 192.168.2.42 1337
user            96821   0,0  0,0  2447044   1084 s003  Ss+  12:16PM   0:00.00 bash -c nc -d 192.168.2.42 1337 > /tmp/volumio.fifo & ncmpcpp -c /Users/user/.ncmpcpp/config-volumio -s visualizer

$ >> sudo dtruss -p 96821
SYSCALL(args)            = return

$ >> sudo dtruss -p 96823
dtrace: 353433 dynamic variable drops with non-empty dirty list
SYSCALL(args)            = return
select(0x4, 0x7FFF5D031F90, 0x0, 0x0, 0x0)               = 1 0
select(0x4, 0x7FFF5D031F90, 0x0, 0x0, 0x0)               = 1 0
select(0x4, 0x7FFF5D031F90, 0x0, 0x0, 0x0)               = 2 0
read(0x3, "\260\377N\377\022\377\325\376X\376J\376\233\375\253\375\311\374\332\374\262\374\276\374\234\374\232\374_\374L\374\217\374v\374\321\374\255\374\006\375\341\374\a\375\372\374\314\374\323\374\305\374\306\374k\374z\374\267\373\355\373u\373\251\373s\373\230\373\200\373\271\373\363\373\026\374^\374h\3746\374P\374\333\373\375\373q\373\225\373\270\372\354\372\270\371\364\371'\371g\371\036\371\\\371b\371\217\371\331\371\371\371\0", 0x400)           = 1024 0
write(0x1, "\260\377N\377\022\377\325\376X\376J\376\233\375\253\375\311\374\332\374\262\374\276\374\234\374\232\374_\374L\374\217\374v\374\321\374\255\374\006\375\341\374\a\375\372\374\314\374\323\374\305\374\30
select(0x4, 0x7FFF5D031F90, 0x0, 0x0, 0x0)               = 1 0
select(0x4, 0x7FFF5D031F90, 0x0, 0x0, 0x0)               = 1 0
select(0x4, 0x7FFF5D031F90, 0x0, 0x0, 0x0)               = 1 0
[…]

PS:也许问题是“nc”在“tmux”中与“ncmpcpp”一起启动......

tmux split-window -t "$session":1 -v -p 28 "nc -d $IP_OF_SERVER 1337 > /tmp/volumio.fifo & ncmpcpp -c $HOME/.ncmpcpp/config-volumio -s visualizer"

我如何在后台永久运行“nc -d $IP_OF_SERVER 1337”,也许也由 crontab 启动?是否有类似“-k”参数用于连接到服务器?

相关内容