'nc'は、FIFOファイルを転送するときに〜100%CPUを使用します。

'nc'は、FIFOファイルを転送するときに〜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)はローカルで実行されています。

これは、localhostのncmpcpp設定の重要な部分です。

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

これは、リモートサーバーのmpd設定の重要な部分です。

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

私のローカルコンピュータで "nc"コマンドを実行すると、多くのリソースが使用されているようです...私のCPUパフォーマンスの100%です。

CPU

活力

問題がある場所にはどんなアイデアがありますか?それとも、これが正常であれば、状況全体をどのように改善できますか?

残念ながら、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:おそらく問題は、「tmux」で「nc」が「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」パラメータのようなものはありますか?

関連情報