Linux服務器核心參數配置

  使用Linux做爲長鏈接的web服務器時,爲了增長服務的容量,以及處理性能,須要修改一些參數。html

1、多進程綁定CPU  node

  一、使用taskset命令能夠綁定進程到指定CPU,以減小多核CPU環境中,單進程在多個CPU之間卻換運行而產生的CPU上下文卻換。linux

  taskset參數:web

  -p 指定已存在進程的pid,而不是啓動一個進程;同時該命令還返回該進程當前的CPU-list掩碼,如:ubuntu

0x00000001
is processor #0

0x00000003
is processors #0 and #1

0xFFFFFFFF
is all processors (#0 through #31)

  -c 指定進程的CPU列表,該列表可使用逗號分隔,或者區間橫線符號,如:0,5,7,9-11.緩存

  taskset -cp 1,2,3 9876  #指定9876進程在1,2,3CPU上運行服務器

  taskset -c 1,2,3 node test.js  #在CPU1,2,3上啓動一個進程網絡

  參考:http://yunwei.org/123/ ; http://hi.baidu.com/zhongalin_hust/item/d8a556385c5a2983f5e4ad18socket

 

  二、綁定CPU的好處,主要由兩點:1)提升CPU緩存的命中率,避免卻換執行的CPU致使的緩存換入換出。2)平衡各個CPU之間的負載。tcp

  參考:Nginx的CPU綁定優化:http://blog.csdn.net/wangkun_dhcc/article/details/8713336

  管理處理器的親和性:http://www.ibm.com/developerworks/cn/linux/l-affinity.html

2、使用nice和renice來修改進程的優先級

  nice,renice分別用於啓動時與啓動後修改進程的nice值,nice值爲正表示優先級下降,爲負值表示優先級提升,進程全部者容許下降優先級,可是隻有root才能夠提升優先級。

  nice參數

  -n val node test.js #啓動的時候設置nice值

  renice val pid

3、調整文件描述符限制

  linux中文件描述符有兩種:

  一是系統級別的限制(表示全部進程總數量限制):

    修改 /etc/sysctl.conf文件,增長以下兩行
    fs.file-max = 1000000 --系統級別全部進程可打開的文件數(ubuntu默認10萬)
   fs.nr_open = 1000000 --定義了file-max容許被修改的最大值,file-max不能夠超過該值(ubuntu默認100萬)
   使用 /etc/sysctl.conf 後可使用 sysctl -p 生效 也能夠修改以下兩個文件,效果同樣(/etc/sysctl.conf中得配置,是直接對應到 /proc/sys 目錄下面):
/proc/sys/fs/file-max /proc/sys/fs/nr_open

  二是用戶級別的限制(表示系統中的單個用戶可打開的文件數):

    修改配置文件:
    /etc/security/limits.conf

  * soft nofile 1000000 
  * hard nofile 1000000

  修改後能夠採用重登錄,或者重啓的方式生效。

  另外可使用ulimia -a的方式來查看 open files 項是否爲修改後的值。

  所以在服務端,須要同時修改系統與用戶級別的限制,而在測試客戶機器中,因爲打開的文件數很是有限,所以默認的系統限制已經足夠,只須要修改用戶級別(默認1024)的限制便可。(ubuntu 默認 file-max大約10萬,nr_open大約100萬)

4、網絡資源修改

修改配置文件 /etc/sysctl.conf ,修改後使用 sysctl -p
  net.core.somaxconn = 2048 ---監聽隊列最大值
  net.core.rmem_default = 262144
  net.core.wmem_default = 262144
  net.core.rmem_max = 16777216
  net.core.wmem_max = 16777216
  net.core.netdev_max_backlog = 100000 ---網絡設備接收到的數據,比處理快時,容許保存的最大包數量

  net.ipv4.tcp_rmem = 40960 40960 16777216 ---TCP讀緩存大小 最小、默認、最大
  net.ipv4.tcp_wmem = 40960 40960 16777216
  net.ipv4.tcp_mem = 786432 2097152 3145728 ---系統TCP內存使用限制,以頁爲單位
  net.ipv4.tcp_max_syn_backlog = 32786 --未創建鏈接隊列,能夠增長等待鏈接創建的TCP數量
  net.ipv4.tcp_fin_timeout = 15 ---主動斷開鏈接,發送FIN後等待對方ACK的時間,默認60秒
  net.ipv4.tcp_tw_reuse = 1    --是否可使用TIME_WAIT,TCP鏈接用於創建新鏈接
  net.ipv4.tcp_tw_recycle = 1    --是否開啓帶回收TIME——WAIT TCP的功能 ?
  net.ipv4.tcp_max_orphans = 131072 --系統容許沒有歸屬的socket數量
  net.ipv4.ip_local_port_range = 1024 65535

  因爲服務端須要保持大量的socket連接,所以適當地減低每一個socket的緩衝區大小,有利於減小對內存的佔用。

  而對於客戶端,只須要修改 ip_local_port_range 便可。默認狀況下,端口範圍爲從 32768 - 61000 只有一萬多個端口可使用。

5、判斷已啓動進程的系統資源限制

  修改了系統限制以後,以後啓動的進程將採用新的限制,而已經啓動的進程將保持原有的限制。

  當不肯定進程的限制時,能夠經過查看 /proc/pid/limits 文件來了解主要的資源限制。

相關文章
相關標籤/搜索