機器人管理框架
以一個簡單的多線程框架為例,主線程負責控制邏輯,管理所有的機器人狀態信息。子線程執行每個機器人的任務,包括連接服務器,發送數據,接收數據,斷開連接等。
1.3. 結果統計
機器人發送請求包之后,一般是要等待服務器的響應回包。服務器那邊可以計算本次壓測過程中各項業務數據,包括TPS,總的收發包量等。
不可能在測試過程中一直盯著各個數據看,我們需要把每項數據記錄下來,后續綜合各項結果進行分析。
這里的結果統計除了需要統計每個機器人收到回包的結果,還需要統計服務器在壓測過程中的各項性能數據變化。一旦客戶端的壓力上到一定值時,服務器某項資源支撐不了的話,說明這個資源可能存在短板,存在可以優化的空間。
性能結果分析
性能結果分析是一個比較復雜的過程。需要綜合硬件、操作系統、應用程序等多方面來定位。
2.1. 硬件的影響
硬件對服務器性能影響還是蠻大的,如果是土豪的話,可以直接買最好的。我們分析硬件主要是希望選擇合適的配置,節約資源,避免出現高射炮打蚊子的情況。
2.1.1. CPU
在資金的充足下,一般來說CPU的數量越多,主頻越高,那么服務器的性能也就會越好。在實際測試過程中,如果在大壓力下持續觀察CPU的使用率很低,那么CPU的資源基本上是可以滿足服務器要求的。這樣的情況其實是有點浪費CPU資源的,比較理想的況是壓力不大的時候CPU利用率比較低,壓力上來之后CPU利用率保持在60%-70%。
大部分的CPU在同一時間內只能運行一個線程,但是超線程的處理器可以在同一個時間運行多個線程,我們可以利用處理前超線程特性提高系統性能。雖然采用超線程技術能同時執行兩個線程,但它并不象兩個真正的CPU那樣,每個CPU都具有獨立的資源。當兩個線程都同時需要某一個資源時,其中一個要暫時停止,并讓出資源,直到這些資源閑置后才能繼續。因此超線程的性能并不等于兩顆CPU的性能。
2.1.2. 內存
內存的大小也是影響服務器性能的一個重要因素。內存太小,系統進程要被阻塞,應用程序會變得緩慢,甚至是失去響應;如果太大的話,也是造成一種浪費。Linux系統中采用物理內存和虛擬內存兩種方式,使用虛擬內存可以緩解物理內存的不足,但是如果占用過多的虛擬內存的話,應用程序的性能會明顯的下降。
2.1.3. 網絡帶寬
網絡帶寬的大小限制了客戶端與服務器交互的流量,相對其他硬件資源,網絡帶寬在價格上更貴。這需要我們合理預估服務器的可服務器能力,需要占用的帶寬資源。
2.1.4. 磁盤IO
目前磁盤都是機械方式運作的,主要體現在磁盤讀寫前尋找磁道的過程。磁盤自帶的讀寫緩存大小,對于磁盤讀寫速度至關重要。讀寫速度快的磁盤,通常都帶有較大的讀寫緩存。磁盤的尋道過程是機械方式,決定了其隨機讀寫速度將明顯低于順序讀寫。在我們做系統設計和實現時,需要考慮到磁盤的這一特性。