!['nc'는 FIFO 파일을 전송할 때 ~100% CPU를 사용합니다.](https://linux55.com/image/62035/'nc'%EB%8A%94%20FIFO%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%A0%84%EC%86%A1%ED%95%A0%20%EB%95%8C%20~100%25%20CPU%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%A9%EB%8B%88%EB%8B%A4..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)는 로컬에서 실행되고 있습니다.
이것은 localhost에서 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
[…]
추신: 아마도 문제는 "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" 매개변수 같은 것이 있나요?