'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
[…]

추신: 아마도 문제는 "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" 매개변수 같은 것이 있나요?

관련 정보