centos 7上nginx+uwsgi 性能調優

  上一章將nginx +uwsgi搭建起來,將keystone掛載後面。但是發現一個問題,如果http請求達到一定量後,nginx直接返回502。這讓需要部署大規模openstack集羣的我很是頭疼,比較了一下請求的處理能力,keystone 原生的api 接口是可以承受一定量的大規模併發請求的。這就讓我思考一個問題,爲什麼nginx作爲web,性能卻沒有keystone api 自身的承載能力好呢。於是我做了壓測,查了一下原因。

   

    服務器配置:24 cpu+200G mem+1T disk

    系統:centos 7.1

     部署:kesytone nginx+uwsgi


     先將keystone部署在nginx+uwsgi 後端

     在同機房的另外一臺服務器上發起壓測:

ab -r -n 100000 -c 100 -H "User-Agent: python-keystoneclient" -H "Accept: application/json" -H "X-Auth-Token: 65e194"  http://keystonehost:35357/v2.0/

     發現http處理正常。然後改一下併發數到200.發現大概50%的返回爲502。

     然後我將keystone-api 卻換成keystone 自身的服務openstack-keystone。再次用200併發壓測:發現處理正常,沒有返回502的。

ab -r -n 100000 -c 200 -H "User-Agent: python-keystoneclient" -H "Accept: application/json" -H "X-Auth-Token: 65e194"  http://keystonehost:35357/v2.0/


    大概知道問題應該在nginx和uwsgi上,限制了併發的處理數。


    查了nginx uwsgi官方的資料。原來調優有好幾個參數,並且系統本身也需要做一些調優

  1.首先先看一下nginx.conf裏影響處理的配置

  

user nginx;
worker_processes  xx;  #可以設置成cpu個數,體驗較佳的性能

error_log  /var/log/nginx/error.log;
pid        /var/run/nginx.pid;


worker_rlimit_nofile 65535; # 最大打開文件數,這個值需要<= worker_connections


events {
  worker_connections 65535;  # 最大連接數,這個值依賴系統的配置。

}

     

  2.看一下系統的配置sysctl.conf

 net.core.somaxconn = 2048  #定義了系統中每一個端口最大的監聽隊列的長度,這是個全局的參數。默認是128.優化可以根據系統配置做優化

  

  3.uwsgi 的配置優化/etc/uwsgi.d/admin.ini

 workers = 24  # 併發處理進程數
 listen = 65535 # 併發的socket 連接數。默認爲100。優化需要根據系統配置

 在做優化之前,發現併發數過不了100.原因就是這裏,uwsgi 的socket 默認鏈接爲100.

 做完調優,在此壓測了一下性能,併發爲10000時:

ab -r -n 100000 -c 10000 -H "User-Agent: python-keystoneclient" -H "Accept: application/json" -H "X-Auth-Token: 65e194"  http://keystonehost:35357/v2.0/

壓測報告:

Server Software: nginx/1.8.1
Server Hostname: keystonehost
Server Port: 35357
Document Path: /v2/
Document Length: 450 bytes
Concurrency Level: 15000
Time taken for tests: 30.136 seconds
Complete requests: 100000
Failed requests: 0
Write errors: 0
Total transferred: 72900000 bytes
HTML transferred: 45000000 bytes

Time per request: 4520.417 [ms] (mean)

Transfer rate: 2362.33 [Kbytes/sec] received

  

 這個時候切換到keystone自身服務openstack-keystone。併發爲1000時。

 壓測報告:

  

Server Software:
Server Hostname: keystonehost
Server Port: 35357
Document Path: /v2/
Document Length: 450 bytes
Concurrency Level: 10000
Time taken for tests: 100.005 seconds
Complete requests: 100000
Failed requests: 0
Write errors: 0
Total transferred: 70800000 bytes
HTML transferred: 45000000 bytes

Time per request: 10000.507 [ms] (mean)

Transfer rate: 691.37 [Kbytes/sec] received


  可以看出,openstack-keystone服務到併發爲1000時,api服務已經到極限了。


  所以nginx+uswgi 經過調優後,nginx的高性能立即體現出來。

 大家要是還有更好的調優方式,歡迎大家貼出來一起學習哈。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章