"내 Node.js가 왜 이렇게 느릴 수가 있어?"이럴 때 해보고 싶은 거.

9127 단어 v8Node.js성능

서곡

node --help 노드의 시동 옵션을 보면 몰래 빚어낸--v8-options 초보자들이 거부하는 카리스마가 있다.
Node.js의 공식 문서에 의하면
Print v8 command line options.
Note: V8 options allow words to be separated by both dashes (-) or underscores (_).
For example, --stack-trace-limit is equivalent to --stack_trace_limit.
보아하니 V8 엔진의 시동 옵션도 노드 명령을 통해 제공할 수 있을 것 같다.
겸사겸사 "-"와 ""아무거나 될 것 같아요.
그리고 이거--v8-options를 쓰면 노드.js의 연출 조정에 도움이 된다고 합니다.Node.js를 사용하는 개발에서 벗어났기 때문에 사용할 기회가 있는지 의심스럽다.
그나저나 이 경우 V8 엔진은구글 V8 자바스크립트 엔진, 절대 아니다V형 8기통 엔진.

써보자... 그 전에.


우선 전제 노드로 한다.js 버전은 LFS v8입니다.9.1.
그리고 V8 옵션을 사용해 봤는데 대충 세어봤는데 400개 정도 만지느라 너무 힘들었어요.
  • --trace-opt ( --trace-deopt )
  • --prof
  • --trace-events-enabled
  • 주위에 접촉하다.

    --trace-opt, --trace-deopt


    이 녀석들을 말하기 전에 먼저 노드를 정해라.js(V8 엔진)의 특성으로 실행하면서 코드를 동적으로 최적화하는 것이 있다.--trace-opt는 실행 과정에서 최적화된 로그 출력을 하는 옵션입니다.
    그럼 "--trace-deopt은 무엇입니까?"하지만 여기서 동태적으로 최적화된 것이 바로 Miso다.

    V8 엔진: "코드를 최적화하고 싶습니다."
    V8 엔진 "아, 아까의 최적화라고 할 수는 없어요. 제가 회복되면 다시 할게요. 용서해 주세요~"
    이 시나리오는 Node입니다.js의 실행에서 자주 발생합니다.--trace-deopt 옵션이 로그에 취소 작업을 커밋합니다.

    그렇다면 언제 일어날까요?


    여기에 적당한 함수를 준비하다
    test1.js
    function testFunc(a) {  
        return a + a;
    }
    
    
    예를 들어 이 함수의 매개 변수가number로 표시되면 V8 엔진은 "오, 이 함수는number의 덧셈입니다. 우리는 그것에 따라 최적화해야 합니다."라고 표시합니다..
    그러다가 갑자기 string을 집어넣으면 "string도 왔나요?"그렇습니다.
    우선 매개 변수를number로 설정해서 실행해 보세요.
    test1.js
    function testFunc(a) {  
        return a + a;
    }
    
    // 環境によってはログを出力する前にコードを実行し終わってしまう場合があります。
    // その場合ログが何も出ないので、適宜ループ回数を調節してください。 
    for (let i = 0; i < 1000000; i++) {  
        testFunc(i);
    }
    

    출력 optimizing 과 같은 로그입니다.
    그럼 이 전선에 좀 나쁘죠?
    test1.js
    
    function testFunc(a) {  
        return a + a;
    }
    
    for (let i = 0; i < 1000000; i++) {  
        testFunc(i);
    }
    
    for (let i = 0; i < 1000000; ++i) {  
        testFunc(i + "");
    }
    
    

    와아아아아아아아!
    화면에는 수록되지 않았지만 deoptimizing라는 문구가 출력됐다.
    또는 로그 출력은 코드의 변경량에 대한 변화가 너무 크다.심상치 않다.
    이런'최적화되면 제자리에 갖다 놓을까'라는 생각을 여러 번 반복하다 결국 V8 엔진은'이건 최적화가 안 된다'며 수저를 던지지만, 로그를 보고 추측하면 상당한 자원이 낭비될 수 있다.

    원래 최적화가 안 되는 경우.


    try-catch 등 특정 상황에서 V8 엔진은 처음부터 최적화를 포기한다(또는 너무 간단하기 때문에 필요하지 않다고 판단한다).
    상세한 내용은 여기.에 기재되어 있지만, 나는 아직 읽지 못했다...

    --prof

    --prof 옵션은 CPU 사용과 관련된 로그를 유지합니다.
    아까 전선으로 한번 해 보세요.node --prof test1.js
    실행하면 isolate 응, 안 돼.로그라는 파일이 있는데 인간만 읽을 수 있는 지옥일지가 기다리고 있다(네 눈으로 확인해 봐).
    가공이 알아볼 수 있는 기능은 노드다.js에 기준이 있으니까 안심하세요.
    처음부터 그렇게 하자.node --pref-process [さっき作ったv8.logのファイル名] 성형이 가능합니다. 이렇게 하면 표준 출력으로 출력됩니다. 잘 보고 싶으면 적당한 파일에 적으세요.

    뭐, 이건 사실 지옥의 기록이야. "아, CPU 사용률이 이상하네~"이럴 때 사용해보시면 도움이 될 거예요.

    --trace-events-enabled


    본명
    먼저 아까 파일에 옵션 추가 --trace-events-enabled 를 실행합니다.

    node_trace.1. 로그 같은 수상한 파일이 나타났다.
    그런 다음 Google Chromechrome://tracing과 URL 액세스1를 입력합니다.

    이렇게 된 화면 때문에 방금 수상한 파일을 Load 버튼에서 읽습니다.
    그래서...!

    클라이언트가 자주 사용하는 개발 도구의 성능 라벨 형식의 미리 보기 그림...!!
    샘플이 너무 짧아서 그런지는 몰라도 뭐라도 할 수 있을 것 같아요.2

    만약 정말 모든 방법을 다 썼다면


    찬송 V8

    기도할게요3

    ※ 좋은 엔지니어를 흉내내지 말라는 위로일 뿐

    참고 자료

  • Node.js 성능 조정 tips
  • Node.js 성능 최적화를 막는 발견 방법
  • Chromium 브라우저의 경우 Google Chrome을 제외한 다른 브라우저도 사용할 수 있습니다.Vivaldi면 vivaldi://tracing 사용할 수 있습니다. 
    왠지 12/3을 월요일로 착각하고 있다.'하루가 남았는데 www'는 여유로운 척하다가 시간이 없어졌다. 
    매드맥스의 이 포즈 감독은 "V8 엔진을 대표한다"고 말했다.물론 이곳의 V8 엔진은 V형 8기통 엔진이다. 

    좋은 웹페이지 즐겨찾기