2013-02-25 35 views
5

Đầu tiên tôi export PERL5OPT=-d:NYTProf từ dòng lệnh để tùy chọn gỡ lỗi của tôi sẽ được kế thừa bởi các tiến trình con. Sau đó, tôi khởi chạy chương trình Perl của mình contactd. Nó dĩa để trở thành một quá trình daemon, và sau đó ngã ba/thực hiện chín trường hợp của một chương trình Perl khác, table_manager. (Các exec trông giống như exec /path/to/perl /path/to/table_manager.) Tại thời điểm này tôi có thể thấy 10 hoặc 11 tập tin mới được gọi là nytprof.out. nnnn; một cho mỗi quá trình đã được chia nhỏ đến tận bây giờ, như mong đợi.Sử dụng Devel :: NYTProf trên chương trình mà fork/execs

Khách hàng kết nối với contactd mà ngã ba/giám đốc điều hành nô lệ, mà lần lượt kết nối với các nhà quản lý bảng chín và chấp nhận yêu cầu từ khách hàng và chuyển chúng đến các nhà quản lý bảng chín.

Sau khi chạy một kết nối máy khách điển hình, tôi tắt tất cả các quy trình máy chủ. Tôi chạy nytprofmerge để hợp nhất các số khác nhau nytprof.out. nnnn tệp vào nytprof-merged.out và sau đó chạy nytprofhtml -f nytprof-merged.out --open.

Khi báo cáo HTML mở ra, tôi không thấy đề cập đến bất kỳ điều gì nhưng contactd. Các chương trình con hàng đầu chủ yếu là các khối BEGIN, nhập, AUTOLOAD ... các công cụ thực thi sớm.

Điều này dẫn tôi nghĩ rằng NYTPROF đi qua một ngã ba (dựa trên các tập tin nhiều nytprof.out) nhưng vì một lý do không được tiếp tục hồ sơ các exec 'ed chương trình Perl.

Tôi đang chạy perl 5.16.1 và Devel :: NYTProf mới nhất, trong MacOSX 10.8.2.

Bất kỳ đề xuất nào về những gì tôi chưa làm?

Trả lời

3

Bạn có thể thiết lập biến sâu ngã ba để -1:

http://search.cpan.org/~timb/Devel-NYTProf-4.25/lib/Devel/NYTProf.pm#forkdepth=N

forkdepth = N

Khi một quá trình perl đang được cấu hình thực hiện một fork() đứa trẻ quá trình là cũng được lược tả. Tùy chọn ngã ba có thể được sử dụng để điều khiển điều này. Nếu forkdepth bằng không thì hồ sơ sẽ bị vô hiệu hóa trong quy trình con .

Nếu forkdepth lớn hơn 0 thì hồ sơ sẽ được bật trong quy trình con và giá trị ngã ba trong quy trình đó là bị giảm một.

Nếu forkdepth là -1 (mặc định) thì không có giới hạn về số của các thế hệ trẻ em được lược tả.

Kính trọng,

+0

Tôi đã phải thử công việc này, trên một hệ điều hành khác (CentOS), và có một số khác biệt. Tôi đã phải xác định rõ ràng tùy chọn * addpid = 1 * để nhận NYTPROF để thêm pid vào các tệp .out. (Điều này dường như xảy ra tự động trong môi trường OSX của tôi.) Và tôi có mọi thứ tôi muốn, mà không chỉ định forkdepth = -1 (mặc định là mặc định). Vì vậy, tôi sẽ phải cố gắng tối nay trên OSX và xem nếu xác định addpid là câu trả lời, hoặc nếu forkdepth tạo sự khác biệt. – Chap

0

AFAIU bạn quên một nytprof.out đầu tiên hợp nhất. Bạn có thể hợp nhất hoặc bạn có thể vượt qua tùy chọn addpid = 1 để luôn nhận được nytprof.out.nnnn ngay cả đối với mục nhập đầu tiên.

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