簡體   English   中英

控制台輸出消耗多少CPU? (每秒約140行)

[英]Console output consuming much CPU? (about 140 lines per second)

我正在寫本科學位論文,當時我編寫了一個程序,該程序分布在許多服務器上,並通過IPv6多播和單播來交換消息。 網絡使用率相對較高,但我認為當測試中有15台服務器時,每秒會有2個請求,這並不是很高:

服務器1通過多播向服務器3-15請求信息。 3-15歲的每個人都必須做出回應。 如果在0.5秒后缺少一個響應,則重新發送多播,但是只有丟失的服務器必須響應(因此,在大多數情況下,這只是一台服務器),服務器2完全相同。 如果5次重試后仍缺少結果,則將丟失的服務器標記為無效服務器,並將更改與其他服務器同步(1/2)

因此,每秒有2個多播,每秒有26個單播。 我認為應該不應該太多嗎?

服務器1和2正在運行python Web服務器,我用來在每個服務器上每秒(通過Web客戶端)發出請求

整個szenario在mininet環境中運行,該環境在具有2個核心(最大2.8ghz)和1GB RAM的虛擬盒子ubuntu中運行。 在運行測試時,我通過htop看到CPU占100%,而RAM占50%。 因此,CPU是這里的瓶頸。

我注意到2-5分鍾(1分鍾= 60 *(2 + 26)消息= 1680消息)之后,丟失了太多結果,導致新請求進入時發送重復次數過多,因此“管理服務器”認為客戶端服務器(3-15)已關閉並注銷了它們。 與其他管理服務器同步后,所有客戶端服務器在兩個管理服務器上都標記為已失效,這是不正確的...

我想知道問題是否出在我的調試輸出上? 我為發送和接收的每條消息打印3-5條消息。 這樣就差不多了(讓我們猜每個發送/接收的消息是5條消息)(26 + 2)* 5 =在控制台上打印的140行。

我將python 2.6用於服務器。

因此,這里的問題是:控制台輸出會降低整個系統的速度嗎,因為簡單請求連續5次要花費0.5秒以上的時間? 在我的測試中,請求處理很簡單。 沒有復雜的計算或類似的東西。 基本上,它類似於“在[“ bla”,“ blaaaa”,...]中返回return_param(5個項目的清單)

如果是,如何完全禁用輸出而不必注釋掉每個打印語句? 或者甚至有可能只輸出包含“錯誤”或“警告”的行? (不是通過grep,因為當grep變為活動狀態時,所有打印都已經完成了……我的意思是直接在python中)

還有什么可能導致我的申請這么慢? 我知道這是一個非常籠統的問題,但也許有人已經對mininet和網絡應用程序有了一些經驗...

我終於找到了真正的問題。 這不是因為打印(刪除它們會稍微改善性能,但不是很明顯),而是因為線程使用了共享鎖。 此鎖在多個CPU內核上共享,導致整個過程非常緩慢。

我添加到執行虛擬機中的內核越多,速度就越慢,這很奇怪。

現在,新的瓶頸似乎是APScheduler ...我總是收到諸如“事件丟失”之類的消息,因為調度程序上的負載過多。 所以這是下一步要加快的速度... :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM