2013-01-08 18 views
5

Trong khi lược tả chương trình nodejs, tôi thấy rằng 61% bọ ve là do 'Không xác định' (xem bên dưới). Đây có thể là gì? Tôi nên tìm gì?hồ sơ nodejs; những gì có thể 'Không xác định' là

gr,

Coen

Statistical profiling result from node, (14907 ticks, 9132 unaccounted, 0 excluded). 

[Unknown]: 
    ticks total nonlib name 
    9132 61.3% 

[Shared libraries]: 
    ticks total nonlib name 
    1067 7.2% 0.0% C:\Windows\SYSTEM32\ntdll.dll 
    55 0.4% 0.0% C:\Windows\system32\kernel32.dll 

[JavaScript]: 
    ticks total nonlib name 
    1381 9.3% 10.0% LazyCompile: *RowDataPacket.parse D:\MI\packet.js:9 
...... 

Trả lời

2

Bạn đang sử dụng phiên bản 64 bit của nút Node.JS để chạy ứng dụng của bạn và bản dựng 32 bit vỏ d8 để xử lý v8.log của bạn. Sử dụng phiên bản 32 bit của Node.JS với ia32 làm mục tiêu xây dựng cho vỏ d8 hoặc phiên bản 64 bit của Node.JS với x64 làm mục tiêu xây dựng vỏ d8 sẽ giải quyết được sự cố của bạn.

2

Bạn đang tải bất kỳ module đã xây dựng phụ thuộc?

Về cơ bản là "Không xác định" có nghĩa là "không được tính tiền" (hãy kiểm tra tickprocessor.js để được giải thích thêm). Ví dụ: GC sẽ in các thông báo như "nhặt rác, bắt đầu, ..." nhưng điều đó không được công nhận bởi logreader.js.

Sẽ giúp bạn biết thư viện hồ sơ bạn đang sử dụng để phân tích cú pháp tệp v8.log.

Cập nhật

Gói node-tick chưa được cập nhật trong hơn một năm và có lẽ còn thiếu rất nhiều prof lệnh gần đây. Hãy thử sử dụng node-profiler để thay thế. Nó được tạo bởi một trong những người duy trì nút. Và nếu bạn muốn kết quả tốt nhất tuyệt đối, bạn sẽ cần phải xây dựng nó bằng cách sử dụng node-gyp.

Cập nhật

tôi đã phân tích các v8.log đầu ra bằng cách sử dụng mới nhất từ ​​node-profiler (tin mới nhất về master, không thẻ mới nhất) và đăng các kết quả tại http://pastebin.com/pdHDPjzE

Cho phép tôi chỉ ra một vài mục nhập chính xuất hiện khoảng một nửa xuống:

[GC]: 
    ticks total nonlib name 
    2063 26.2% 

[Bottom up (heavy) profile] 
6578 83.4% c:\node\node.exe 
1812 27.5% LazyCompile: ~parse native json.js:55 
1811 99.9%  Function: ~<anonymous> C:\workspace\repositories\asyncnode_MySQL\lib\MySQL_DB.js:41 
736 11.2% Function: ~Buffer.toString buffer.js:392 

Vì vậy, 26,2% của tất cả các loại tập lệnh đã được sử dụng trong thùng rác col lection. Đó là cao hơn nhiều so với nó nên được. Mặc dù nó tương quan tốt với bao nhiêu thời gian được chi tiêu trên Buffer.toString. Nếu có nhiều bộ đệm đang được tạo sau đó được chuyển thành chuỗi, cả hai sẽ cần phải được gc'd khi chúng rời khỏi phạm vi.

Ngoài ra, tôi rất tò mò vì sao nên dành nhiều thời gian ở số LazyCompile cho json.js. Hoặc nhiều hơn như vậy, tại sao json.js thậm chí là cần thiết trong một ứng dụng nút?

Để giúp bạn điều chỉnh hiệu suất ứng dụng của mình, tôi bao gồm một vài liên kết bên dưới cung cấp hướng dẫn tốt về việc cần làm và tìm kiếm.

trượt boong đẹp với những điều cơ bản:
https://mkw.st/p/gdd11-berlin-v8-performance-tuning-tricks/#1

Thêm ví dụ tiên tiến của kỹ thuật tối ưu hóa:
http://floitsch.blogspot.com/2012/03/optimizing-for-v8-introduction.html

sử dụng tốt hơn đóng cửa:
http://mrale.ph/blog/2012/09/23/grokking-v8-closures-for-fun.html

Bây giờ như xa như lý do tại sao bạn không thể đạt được cùng một đầu ra.Nếu bạn đã xây dựng và sử dụng node-profiler và được cung cấp nprof từ master và nó vẫn không hoạt động thì tôi cho rằng nó có liên quan đến việc sử dụng Windows. Hãy suy nghĩ về việc nộp một lỗi trên GitHub và xem liệu anh ta có giúp bạn không.

+0

Tôi đang sử dụng gói 'đánh dấu' npm – coen

+0

Tôi đã thử sử dụng https://github.com/bnoordhuis/node-profiler, nhưng kết quả vẫn giữ nguyên. – coen

+0

@coen Bạn có thể ghi đè hoặc tệp v8.log của mình không. Nó sẽ là cách dễ nhất để tôi giúp bạn. –

0

Cố gắng xây dựng v8 với profiling hỗ trợ trên:

scons prof=on d8 

Hãy chắc chắn rằng bạn chạy node --prof với phiên bản tương ứng với phiên bản v8

Sau đó tools/linux-tick-processor path/to/v8.log sẽ hiển thị cho bạn những thông tin hồ sơ đầy đủ.

+1

scons đã không còn được dùng để ủng hộ gyp. –

Các vấn đề liên quan