Linux服務簡單優化

硬件優化

  • 處理器:核心數、主頻、製程工藝、線程數、緩存等css

    核心數:一、二、四、六、八、十二、2四、32等
    主頻:2.0GHz、2.3GHz等等
    製程工藝:22nm、14nm、10nm等等
    線程數:一、2
    緩存:L一、L二、L3
    建議:儘可能選擇核心數越多、主頻越高、製程工藝更新、支持超線程、緩存容量越大,且上市已過半年左右的
    處理器。數據庫

  • 內存:容量、頻率、代數後端

    容量:1G、2G、4G、8G、16G、32G
    頻率:1600、186六、213三、2400MHz等
    代數:一、二、三、4代
    建議:儘可能選擇單條容量16G或32G的DDR4 2133MHz及以上頻率的內存條。緩存

  • 硬盤:類型、轉速、接口類型、RAID安全

    類型:機械和SSD固態
    轉速:5400、7200、10000、15000 轉/分(機械硬盤)
    接口類型:SATA、SAS、PCI-E
    RAID:0、一、五、六、十、50、60
    建議:儘可能選擇支持PCI-E的SSD固態硬盤,尤爲數據庫、搜索引擎。服務器

  • 網卡:速率、接口類型

    速率:10Mbps、100Mbps、1Gbps、4Gbps、10Gbps
    接口類型:以太網、光纖等
    建議:大部分服務器默認提供的1Gbps以太網卡夠用。
    若有需大數據量高併發訪問的服務器遇到網絡流量高峯跑滿的狀況,能夠改用支持4Gbps或10Gbps的光纖接口網卡。cookie

其餘建議:
通常服務器集成顯卡便可,除非有大量視頻圖像處理或異構計算等特殊需求。網絡


操做系統優化

  • 系統服務:關閉不用服務,提升性能同時,提升安全。
    grep -q '7.' /etc/redhat-release
    if [ $? -ne 0 ]; then
    Services=$(chkconfig --list | grep '0' | awk '{print $1}' | grep -Ev 'sshd|network|crond|syslog|ntpd')
    for Service in $Services
    do
        service $Service stop
        chkconfig --level 0123456 $Service off
    done
    else
    Services=(atd avahi-daemon cups dmraid-activation firewalld irqbalance kdump mdmonitor postfix)
    for Service in ${Services[*]}
    do
        systemctl disable ${Service}
        systemctl stop ${Service}
    done
    systemctl enable rc-local
    fi
  • 內核參數:架構

    cat >> /etc/sysctl.conf << EOF
    vm.swappiness = 0
    vm.overcommit_memory = 1
    net.core.rmem_default = 262144
    net.core.rmem_max = 16777216
    net.core.wmem_default = 262144
    net.core.wmem_max = 16777216
    net.core.somaxconn = 60000
    net.core.netdev_max_backlog = 60000
    net.ipv4.tcp_max_orphans = 60000
    net.ipv4.tcp_orphan_retries = 3
    net.ipv4.tcp_max_syn_backlog = 60000
    net.ipv4.tcp_max_tw_buckets = 10000
    net.ipv4.ip_local_port_range = 1024 65500
    net.ipv4.tcp_tw_recycle = 1
    net.ipv4.tcp_tw_reuse = 1
    net.ipv4.tcp_syncookies = 1
    net.ipv4.tcp_synack_retries = 1
    net.ipv4.tcp_syn_retries = 1
    net.ipv4.tcp_fin_timeout = 30
    net.ipv4.tcp_keepalive_time = 1200
    net.ipv4.tcp_mem = 786432 1048576 1572864
    fs.aio-max-nr = 1048576
    fs.file-max = 6815744
    kernel.sem = 250 32000 100 10000
    kernel.pid_max = 65536
    fs.inotify.max_user_watches = 1048576
    kernel.kptr_restrict = 1
    kernel.ctrl-alt-del = 1
    EOF
    sysctl -p
  • 提升系統打開文件數、打開進程數限制,減少默認棧空間大小限制:併發

    echo '* - nofile 1048576' >> /etc/security/limits.conf
    echo '* - nproc  65536' >> /etc/security/limits.conf
    echo '* - stack  1024' >> /etc/security/limits.conf
  • 提升Shell打開文件數、打開進程數限制,減少默認棧空間大小限制:
    cat >> /etc/profile << EOF
    ulimit -n 1048576
    ulimit -u 65536
    ulimit -s 1024
    EOF

服務優化

  • 配置:

    1. 儘可能開啓緩存、緩衝,如:Nginx的fastcgi_cache、open_file_cache,PHP的opcache,MySQL的innodb buffer等等。
    2. 解鎖資源限制,如:提升打開文件數、增長服務工做進程數、CPU綁定等等。
    3. 減少磁盤和網絡IO,如:使用批量讀寫數據,tmpfs文件系統代替磁盤,關閉日誌,開啓http服務的keepalive屬性、gzip壓縮等等。
  • 代碼:

    1. 直接修改應用服務自身源代碼或者使用第三方應用,如:Tengine代替Nginx、MairaDB代替MySQL。
    2. 藉助性能分析調試工具,如:xdebug、xhprof分析業務PHP代碼,慢日誌和explain工具分析SQL語句等等。
  • 編譯:
    1. 添加優化參數,如:gcc編譯優化級別-O參數。
    2. 去除多餘模塊,如:Nginx幾乎不多用到的pop3模塊。
    3. 藉助其它加速模塊或補丁,如:谷歌出品的內存分配庫tcmalloc,阿里巴巴出品的合併靜態文件Nginx補丁Concat。

架構優化

  • 域名解析負載均衡:經過單個域名解析成多個IP地址,將用戶的請求分發到不一樣的機房。
    優勢:簡單,維護比較方便,適合網站鏡像。
    缺點:請求分佈不均勻,域名解析緩存影響高可用。

  • 動靜分離:將圖片、視頻、js、css等靜態文件單獨抽離,減少動態請求和靜態請求服務器之間互相影響。
    優勢:服務器功能更加簡單,排查問題更加容易。
    缺點:開發前期人力物力成本較高。

  • CDN:將靜態資源部署到離用戶更近的網絡,減少用戶請求的網絡傳輸時間。
    優勢:大大提升用戶訪問靜態資源的速度。
    缺點:涉及到國內的複雜環境,管理維護成本較高。

  • 負載均衡:分發請求至後端服務器。
    優勢:大大提升了後端服務器集羣的性能和擴展性。
    缺點:硬件負載均衡太貴。

  • 分佈式內容緩存:將數據庫不常常修改的數據保存至內容緩存服務器。
    優勢:能夠很大程度上減少數據庫的讀壓力。
    缺點:需解決數據緩存失效和數據庫更新的數據一致性問題,包含使人頭疼的雪崩效應。

  • 消息隊列:不只能夠作消息服務器,還能夠將大量的消耗資源操做轉換成順序異步操做。
    優勢:減少瞬間高併發請求和服務器及數據庫負載。
    缺點:消息隊列的高可用實現比較複雜,維護難度較高。

  • 數據庫代理:按照設定規則將不一樣的SQL發送至不一樣的數據庫,而後聚合數據返回。
    優勢:減小了業務代碼層讀寫數據庫的邏輯複雜度,提升了數據庫集羣的擴展性。
    缺點:數據庫代理軟件需從新實現對SQL語句的解析,同時還需支持分庫分表,從而影響性能和維護。

總結

網站性能常常出在數據庫瓶頸。
數據庫耗CPU、耗內存、耗IO,優化架構經常使用的最簡單辦法就是儘可能減少數據庫的讀寫操做。
大部分公司的作法都是將請求儘可能截留在數據庫以前的服務器響應,越靠前越好。
能夠將一部分動態內容轉換成靜態內容,進一步減少動態語言服務器和數據庫讀壓力。
還能夠將一部分讀寫數據庫請求轉成消息隊列實現批量操做。
經過分庫分表分區和數據庫代理擴展數據庫集羣的性能。
固然,SQL語句的優化工做需一直堅持。
其他的服務如遇到性能不足時能夠直接經過前置LVS、Haproxy、Nginx+TCP模塊等方法擴展集羣規模。

緩存:
緩存

架構:
架構

相關文章
相關標籤/搜索