![传输 FIFO 文件时“nc”使用 ~100% CPU](https://linux22.com/image/62035/%E4%BC%A0%E8%BE%93%20FIFO%20%E6%96%87%E4%BB%B6%E6%97%B6%E2%80%9Cnc%E2%80%9D%E4%BD%BF%E7%94%A8%20~100%25%20CPU.png)
在始终连接的服务器上,我在 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”参数用于连接到服务器?