The power of Intel Quad core * 2 + FreeBSD 8 amd64

因工作上的需求,我必須處理 Subversion 因為 svn blame 造成的高系統負載問題。

作業環境如下:
  • FreeBSD 7.2
  • Apache 2.x
  • Subversion 1.x
  • viewvc 1.x
在原來的硬體環境:
  • CPU: Intel Xeon 3.06 GHz with HT
  • RAM: 2GB
  • HDD: SCSI
FreeBSD/SMP: Multiprocessor System Detected: 4 CPUs
cpu0 (BSP): APIC ID: 0
cpu1 (AP/HT): APIC ID: 1
cpu2 (AP): APIC ID: 6
cpu3 (AP/HT): APIC ID: 7

一旦使用者透過 viewvc 執行 annotate 的工作,只要一個! 且單一檔案內容超過萬行的情況下,就會造成系統高負載 (average load 破百) 的情況,最嚴重的狀況是連 console 操作都會 hang 住! 而且 httpd 和 svn 的 process 數量也 fork 很多出來!

深究其因,應該是 viewvc 造成的! 其次,CPU 僅是透過 HT 虛擬成 4 個 cpu,而並非真正 multiple core,因此運算能力也相對較弱!

以提供服務的角度來看,這個功能是使用者經常用到的! 因此,除了去 trace viewvc 外,唯一可解的就是硬體升級了!

新的硬體環境:
  • CPU: Intel Xeon E5420 2.5 GHz
  • RAM: 48 GB
  • HDD: SAS
FreeBSD/SMP: Multiprocessor System Detected: 8 CPUs
FreeBSD/SMP: 2 package(s) x 4 core(s)
cpu0 (BSP): APIC ID: 0
cpu1 (AP): APIC ID: 1
cpu2 (AP): APIC ID: 2
cpu3 (AP): APIC ID: 3
cpu4 (AP): APIC ID: 4
cpu5 (AP): APIC ID: 5
cpu6 (AP): APIC ID: 6
cpu7 (AP): APIC ID: 7

OS 改用 FreeBSD 8 amd64 的版本,將 /tmp 透過 md 掛載大小為 18G 的 memory disk 上,其它軟體套件則依舊一樣 (但版本較新),並套用相同的環境設定!

以一個連線進行 annotate,load average 落在 1.x 左右,以 top 看則只有其中一顆 cpu 被吃到 100%,系統負載很低。

以三個連線進行 annotate,load average 介於 0.x - 2.x 之間,以 top 看則有三顆 cpu 被吃滿,系統負載一樣低。

由這樣的狀況來看,推測如下:
  1. 透過 viewvc 進行 annotate 所造成的問題同樣存在。
  2. 因為 multiple core 的關係,一個 annotate 動作會佔用了一顆 cpu,避免所有資源被佔用。
  3. 如果同時有 8 個 annotate 被啟動,系統勢必變成高負載狀況,後果會如何?

結論: 繼續頭大中... orz

Comments

Popular posts from this blog

How to construct a B+ tree with example

How to show only month and year fields in android Date-picker?

Visitor Counter Script Using PHP