"내 Node.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개 정도 만지느라 너무 힘들었어요.
우선 전제 노드로 한다.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.jsfunction testFunc(a) {
return a + a;
}
예를 들어 이 함수의 매개 변수가number로 표시되면 V8 엔진은 "오, 이 함수는number의 덧셈입니다. 우리는 그것에 따라 최적화해야 합니다."라고 표시합니다..
그러다가 갑자기 string을 집어넣으면 "string도 왔나요?"그렇습니다.
우선 매개 변수를number로 설정해서 실행해 보세요.
test1.jsfunction 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
※ 좋은 엔지니어를 흉내내지 말라는 위로일 뿐
참고 자료
function testFunc(a) {
return a + a;
}
function testFunc(a) {
return a + a;
}
// 環境によってはログを出力する前にコードを実行し終わってしまう場合があります。
// その場合ログが何も出ないので、適宜ループ回数を調節してください。
for (let i = 0; i < 1000000; i++) {
testFunc(i);
}
function testFunc(a) {
return a + a;
}
for (let i = 0; i < 1000000; i++) {
testFunc(i);
}
for (let i = 0; i < 1000000; ++i) {
testFunc(i + "");
}
--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
※ 좋은 엔지니어를 흉내내지 말라는 위로일 뿐
참고 자료
찬송 V8
기도할게요3
※ 좋은 엔지니어를 흉내내지 말라는 위로일 뿐
참고 자료
vivaldi://tracing
사용할 수 있습니다. ↩ 왠지 12/3을 월요일로 착각하고 있다.'하루가 남았는데 www'는 여유로운 척하다가 시간이 없어졌다. ↩
매드맥스의 이 포즈 감독은 "V8 엔진을 대표한다"고 말했다.물론 이곳의 V8 엔진은 V형 8기통 엔진이다. ↩
Reference
이 문제에 관하여("내 Node.js가 왜 이렇게 느릴 수가 있어?"이럴 때 해보고 싶은 거.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/DeployCat/items/1eae80c6493ec2b96c74텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)