2016-08-30 66 views
0

我覺得這個必須有一個簡單的答案,但我真的不知道如何解決這個問題。如何從子進程獲取統計信息以衡量資源利用率?

爲背景,對事物的堆棧是這樣的:

Python script -> C++ binary -(fork)-> actual thing we want to measure.

從本質上講,我們必須通過使用TMP目錄和這個網絡軟件棧我們」的多個實例運行模擬的環境中的python腳本重新開發。該腳本調用一個主機二進制文件(這裏不重要),然後在它加載之後,一個輔助二進制文件。助手二進制文件可以傳遞一個參數以守護進程,當它執行此操作時,它會以通常的方式分叉。

我們需要做的是衡量守護進程的CPU利用率,但我真的不知道該怎麼做。我所做的是定期讀取stat文件,但由於進程守護進程,我不能使用echo $!來獲得它的PID。使用ps aux | grep 'thing'工作正常,但我認爲這是給我的父進程,因爲統計信息是這樣的:

1472582561 9455 (nlsr) S 1 9455 9455 0 -1 4218944 394 0 0 0 13 0 0 0 20 0 2 0 909820 184770560 3851 18446744073709551615 4194304 5318592 140734694817376 140734694810512 140084250723843 0 0 16781312 0 0 0 0 17 0 0 0 0 0 0 7416544 7421528 16224256 140734694825496 140734694825524 140734694825524 140734694825962 0

我知道,父進程不應該是PID1和絕對utime領域和類似的應該大於13時鐘滴答。這就是讓我得出這樣的結論的過程:這個過程實際上是父母過程,而不是那個正在做所有工作的分岔孩子。

我可以修改幾乎任何必要的文件,但由於代碼審查的限制,設計規格等,我必須更改許多文件越少越好。

+0

1. PID1(INIT)成爲所有孤兒的父。 2.「wait3()」和「wait4()」允許獲得關於孩子的統計信息(如果你對孩子完成運行後的信息感興趣)。 –

回答

0
  1. 得到孩子的PID可靠

  2. /proc/[PID]/stat

    • #14獲取CPU統計utime - 在用戶代碼花費的CPU時間,在時鐘測量蜱
+0

自然。這是一個完美的解決方案(並且從一開始就是我的備份),但是它要求我爲父級添加某種設施,以便將該PID提供給python腳本,或者讓父級自己執行性能基準測試。 – Bronze

+0

對這樣的事情使用'ps'不是很健壯。考慮如果兩個測試實例需要並行運行,或者由於高負載,您不夠快,無法在孩子退出之前「捕捉」PID。 – rustyx