Node.JS 프로세스가 cpulimit에 의해 감지되지 않습니다.

Node.JS 프로세스가 cpulimit에 의해 감지되지 않습니다.

다음 명령을 사용하여 Python 프로세스가 CPU를 50%만 사용하도록 제한할 수 있었습니다.

cpulimit -l 50 -e python

하지만 Node로 동일한 작업을 시도하면 프로세스가 전혀 감지되지 않습니다. 아는 사람 있나요? ps aux볼 수 있으므로 무엇이 node누락되었는지 잘 모르겠습니다.

cpulimit -l 50 -e node

내가 실행 중인 플랫폼은 Ubuntu 14.04이지만 이 문제는 Linux 버전과 관련이 없는 것 같습니다.

내 현재 직업은

cpulimit -l 50 -p $(pidof node)

그러나 이는 노드 프로세스의 새로운 인스턴스를 감지하지 못한다는 것을 의미합니다.

답변1

cpulimit우리 모두 알고 있듯이 어떤 상황에서는 제대로 작동하지 않습니다. 때로는 잘 작동하지만(단순한 단일 스레드 응용 프로그램에서는) 다른 경우에는(대부분 다중 스레드 또는 다중 프로세스) 작동하지 않습니다.

기술적으로, CPUlimit가 제한되지 않게 만드는 두 가지 문제가 있습니다. 첫째, 실행하려는 프로그램은 생성된 스레드가 생성된 스레드의 자식이 아닌 방식으로 스레드나 프로세스를 생성합니다. 이렇게 하는 데에는 여러 가지 이유가 있지만 다소 드문 경우입니다.

둘째, SIGSTOP은 "처리"할 수 있는 신호가 아닙니다. 그러나 신호는 비동기적입니다. 따라서 스레드 a는 캔 포크 스레드 b입니다. 스레드 b가 시작되면 스레드 a에 SIGSTOP 신호가 발행될 수 있지만 스레드 b는 신호 없이 시작됩니다.

SIGSTOP은 또한 "가능한 경우" 프로세스를 일시 중지합니다. 때로는 특히 디스크 io의 경우 스레드가 일시 중지되지 않습니다. 제가 생각할 수 있는 가장 일반적인 것은 디스크 IO입니다.

즉, SIGSTOP(cpulimit가 사용하는 것)은 하나의 스레드와 다른 모든 하위 스레드를 중지한다고 가정하지만, 다른 프로세스를 시작할 수 있는 복잡한 다중 스레드 애플리케이션에서 예상한 대로 항상 작동하지는 않습니다. 이러한 경우 기존 일정 제약 조건을 사용하면 더 나은 서비스를 받을 수 있습니다.

답변2

@Mark Plotnick의 의견을 바탕으로 마침내 이유를 알아냈습니다.

ls -l "/proc/$(pidof node)/exe"반품

lrwxrwxrwx 1 antony antony 0 Aug 27 13:04 /proc/4414/exe -> /usr/bin/nodejs

그래서 node나는 사용해야한다nodejs

다음 명령은 유효합니다

cpulimit -l 50 -e nodejs

업데이트: 이것은 실제로 완벽한 솔루션이 아닙니다. 예, 프로세스를 cpulimit감지하는 것이 가능합니다 . 하지만 영구 스크립트를 nodejs실행하는 경우 경고 없이 스크립트가 조기에 종료될 수 있습니다.nodejscpulimitnodejs

업데이트 2: 콘솔/터미널에는 nodejs 프로세스가 중지된 것으로 표시되지만 실제로는 nodejs가 여전히 백그라운드에서 실행 중입니다.

관련 정보