[Nodejs] node - inspector 원 격 디 버 깅 Forever 와 Cluster 를 사용 하여 시작 하 는 Node 서비스

도입부:
최근 에 nodejs 프로젝트 를 디 버 깅 하고 있 습 니 다. 이 프로젝트 는 외국 팀 이 유지 하고 있 습 니 다. 우 리 는 그 내부 의 token 운영 체제 에 대해 알 아야 할 것 같 습 니 다.잠시 소스 코드 를 얻 을 수 있 는 권한 이 없 기 때문에 서 비 스 를 배 치 된 테스트 환경 만 저 에 게 research 를 할 수 있 습 니 다. 그래서 제 가 유일 하 게 생각 하 는 것 은 node - inspector 라 는 debugger 도구 로 코드 를 원 격 으로 디 버 깅 하여 조사 연 구 를 편리 하 게 하 는 것 입 니 다.
그러나 전체 과정 이 생각 보다 순 조 롭 지 못 해 구덩이 에 누 워 있 었 다.본 고 는 제 가 겪 은 경험 과 제 가 이런 문 제 를 해결 하 는 방향 을 소개 하여 여러분 들 이 앞으로 순조롭게 debug 가 비교적 복잡 한 nodejs 프로그램 을 만 들 수 있 도록 하 는 것 입 니 다.
문제 1 node - inspector 는 work 가 없 는 것 같 습 니 다. chrome 은 코드 를 가 져 올 수 없습니다. 기 존 경험 에 따라 server. js 를 시작 하 는 곳 에 -- debug 인 자 를 추가 한 다음 node - inspector 를 실행 하면 chrome 에 입력 할 수 있 습 니 다.http://service_domain: 8080 /? port = 5858 에서 정지점 디 버 깅 을 했 습 니 다.... 와 같다
node --debug start.js

근 데 이렇게 chrome 방문 을...http://service_domain: 8080 /? port = 5858 목 재 는 소스 코드 를 나타 내 는데 그 중에서 반드시 이상 한 점 이 있다.그래서 저 는 start. js 를 살 펴 보 았 습 니 다. 원래 비밀 이 그 안에 있 었 습 니 다. start. js 는 구체 적 인 서비스 가 아니 라 여러 층 의 분석 을 통 해 실제 적 으로 이런 코드 를 실 행 했 습 니 다.
const forever = require('forever');
const path = require('path');
const cwd = process.cwd();

module.exports = {
    start:function(){
        var logFile = path.resolve(cwd,'log/forever_log.log');
        var script = path.resolve(cwd,'kluster.js');
        forever.startDaemon(script,{
            silent: false,
            uid:'demo',
            append: false,
            max: 1,
            logFile: logFile,
        });
    }
};

이 유 를 찾 은 것 같 습 니 다. 실제 script 은 forever 라 는 도구 로 시 작 됩 니 다. forever. startDaemon (script, opts} 의 script 이 야 말로 진정한 서비스 스 크 립 트 입 니 다. 그래서 forever 와 forever - monitor 의 문 서 를 찾 아 보 았 습 니 다. opts 에 -- debug 의 시작 인 자 를 추가 해 야 합 니 다. 그래서 저 는 command: "node - debug" 를 추 가 했 습 니 다.이 한 마디 로 진정한 서 비 스 를 시작 합 니 다.
forever.startDaemon(script,{
            silent: false,
            uid:'demo',
            append: false,
            max: 1,
            logFile: logFile,
            command: 'node --debug'
        });

자, 이때 node - inspector 를 다시 실행 한 후 설 레 는 장면 이 나 타 났 습 니 다. 서버 의 code 는 chrome 에 표시 되 어 있 습 니 다. 제 가 모든 것 이 해결 되 었 다 고 생각 할 때 다음 구덩이 가 다시 나 타 났 습 니 다.
문제 2 node - inspector 는 소스 코드 를 성공 적 으로 보 여 주 었 으 나 breakpoint 를 추가 한 후에 hit 문 제 를 생각 하지 못 했 습 니 다. 저 는 심지어 node - inspector 를 포기 하고 node 원생 이 코드 에 debugger 문 구 를 추가 하 는 방식 으로 코드 를 디 버 깅 하 는 것 도 성공 하지 못 했 습 니 다. 단점 은 항상 효력 을 잃 었 습 니 다. 그래서 코드 를 깊이 분석 할 수 밖 에 없 었 습 니 다.
var script = path.resolve(cwd,'kluster.js');

이전에 forever 를 사용 하여 시작 한 Kluster. js 이 파일 은 이상 할 것 입 니 다.
const cluster = require('cluster');
const numCPUs = require('os').cpus().length;
const http = require('http');

if (cluster.isMaster) {
    console.log("master start...");
    // Fork workers.
    for (var i = 0; i < numCPUs; i++) {
        cluster.fork();
    }
    cluster.on('listening', function(worker, address) {
        console.log('listening: worker ' + worker.process.pid + ', Address: ' + address.address + ":" + address.port);
    });
    cluster.on('exit', function(worker, code, signal) {
        console.log('worker ' + worker.process.pid + ' died');
    });
} else {
    http.createServer(function(req, res) {
        res.writeHead(200);
        res.end("hello world
"); }).listen(3000); }

원래 프로젝트 에 서 는 cluster 라 는 module 을 사용 하여 부하 균형 을 이 루 었 습 니 다. 즉, nodejs 는 n 키 프로 세 스 를 시작 하여 3000 포트 를 동시에 감청 할 것 입 니 다. node - inspector 의 log 출력 도 볼 수 있 습 니 다.
Debugger listening on port 5858
master start...
Debugger listening on port 5859
Debugger listening on port 5860
Debugger listening on port 5861
Debugger listening on port 5862
listening: worker 9968, Address: null:3000
listening: worker 12588, Address: null:3000
listening: worker 9128, Address: null:3000
listening: worker 10856, Address: null:3000

드디어 진실 이 밝 혀 졌 습 니 다. 5858 감청 은 master 프로 세 스 였 습 니 다. 프로 세 스 에 실질 적 인 service 가 없 었 기 때문에 정지점 을 차단 할 수 없 었 습 니 다.http://service_domain:8080/?port=5858포트 를 5859 ~ 5862 의 임의의 포트 로 바 꾸 면 하위 프로 세 스 를 감청 할 수 있 습 니 다. 역시 정지점 이 끊 어 질 것 같 습 니 다.
http://service_domain:8080/?port=5860

문제 3 정지점 은 때때로 효력 이 발생 하지 않 고 port 포트 를 5060 으로 바 꾼 후에 정지점 이 끊 어 질 수 있다 는 것 을 발 견 했 습 니 다. 그러나 또 하나의 새로운 문제 가 발생 했 습 니 다. 그것 은 정지점 이 여전히 효력 을 잃 을 때 가 있다 는 것 입 니 다. 이 문 제 는 분석 하기 쉽 습 니 다. 부하 균형 이 맞 을 때 서버 가 특정한 키 프로 세 스에 할당 을 요청 하 는 것 이 고정 적 이지 않 기 때 문 입 니 다. 즉, 제 페이지 에서 보 낸 request 가 분 배 될 수 있 습 니 다.5859 포트 에 있 는 worker 1 을 처리 할 수도 있 고, 다른 포트 에 있 는 worker 를 할당 할 수도 있 습 니 다. 그래서 5860 포트 만 감청 해도 부족 합 니 다. chrome 감청 포트 4 개 를 열 어야 합 니까? 너무 번 거 롭 습 니 다. 하위 프로 세 스 의 수 를 줄 이 고 1 개의 하위 프로 세 스 로 제어 하 는 것 이 좋 습 니 다. 5859 만 감청 하면 됩 니 다.하나의 포트 로 모든 request 의 요청 을 캡 처 할 수 있 습 니 다.
const cluster = require('cluster');
//const numCPUs = require('os').cpus().length;
const numCPUs = 1;

이로써 우 리 는 node - inspector 를 사용 하여 우리 의 업무 코드 를 즐겁게 디 버 깅 할 수 있 습 니 다. 여기 서 본 고의 예시 적 인 code 를 제시 합 니 다.https://github.com/momoko8443/nodejs_demo_area
참고 문헌: Nodejs 다 핵 처리 모듈 clusternode. js 디 버 깅, node - inspector 및 forever. jsWhat 's New in Node. js v 0.12: Node - Inspector 로 클 러 스 터 된 앱 디 버 깅

좋은 웹페이지 즐겨찾기