暫時中止對mongodb的性能測試 由於前端作負載均衡的nginx性能提高不上去 因爲經費 還有目前測試條件的限制 咱們作的性能測試都是在KVM虛擬機裏搭建的環境 nginx1.2.6 測試工具就是apache benchmark(ab) 操做系統是centos5.4(好老啊) html
測試準備: 前端
主要是內核參數調優 常見的dmesg信息就是‘TCP: time wait bucket table overflow’ nginx
若是開啓了iptables那麼可能會遇到'kernel: ip_conntrack: table full, dropping packet.' mongodb
net.ipv4.tcp_max_tw_buckets = 65535 net.ipv4.tcp_sack = 1 net.ipv4.tcp_window_scaling = 1 net.ipv4.tcp_rmem = 4096 87380 4194304 net.ipv4.tcp_wmem = 4096 16384 4194304 net.core.wmem_default = 8388608 net.core.rmem_default = 8388608 net.core.rmem_max = 16777216 net.core.wmem_max = 16777216 net.core.netdev_max_backlog = 262144 net.core.somaxconn = 262144 net.ipv4.tcp_max_orphans = 3276800 net.ipv4.tcp_max_syn_backlog = 262144 net.ipv4.tcp_timestamps = 0 net.ipv4.tcp_synack_retries = 1 net.ipv4.tcp_syn_retries = 1 net.ipv4.tcp_tw_recycle = 1 net.ipv4.tcp_tw_reuse = 1 net.ipv4.tcp_mem = 94500000 915000000 927000000 net.ipv4.tcp_fin_timeout = 1 net.ipv4.tcp_keepalive_time = 30 net.ipv4.tcp_keepalive_probes = 3 net.ipv4.tcp_keepalive_intvl = 90 net.ipv4.ip_local_port_range = 1024 65000 fs.file-max = 102400
虛擬機內部搭建單個nginx實例 work process的值咱們開始設置的很高 好比2個cpu 咱們給它設定的值爲8或者16 在跑ab測試的時候 運行vmstat 監控狀態 會發現等待運行的進程數>5 當這個數值上升時 能夠明顯感受到ab的速度在下滑 可是調整到和cpu個數一致 等待運行的進程數有明顯的下降 apache
ok 在虛擬機內部壓nginx rps能夠達到1w左右 感受還算比較正常 相比物理上的測試結果 我以爲這個rps仍是比較滿意的 可是經過另一臺物理機 通過網絡來壓它 峯值只能到2k rps左右 咱們的網絡鏈接是100M ab中的平均傳輸率在250K左右 用了一個工具dstat 來查看網絡 磁盤io 網絡傳輸在1M左右 顯然沒有達到峯值 哎 確定是網絡的問題了 查了kvm的相關資料 而後對比本身虛擬機選擇的NIC omg 咱們使用的是默認的NIC 推薦使用virtio 用virtio幾乎能夠達到物理NIC的效率 調整後測試 能夠達到9k-1w rps 在GBit網絡模式下 虛擬機的網絡配置也推薦使用virtio centos