系統優化怎麼作-Linux系統配置優化

前言

應用系統跑在操做系統上面,系統的性能也關係到應用程序的性能,這裏講一些Linux性能關鍵的配置信息。linux

永久關閉selinux

selinux提升系統安全性,但會形成不少麻煩,通常關閉vim

[root@localhost ~]# vim /etc/selinux/config

將SELINUX=enforcing改成SELINUX=disabled,保存後退出,重啓生效安全

[root@localhost ~]# reboot

設定系統runlevel爲3

節約系統資源服務器

[root@localhost ~]# grep 3:initdefault /etc/inittab
id:3:initdefault:
[root@localhost  ~]# init 3

加大系統文件描述符最大值

vim /etc/security/limits.conf

調整大小cookie

* soft nofile 65536
* hard nofile 65536
* soft nproc 65536
* hard nproc 65536

說明:網絡

  1. *表明針對全部用戶
  2. noproc 是表明最大進程數
  3. nofile 是表明最大文件打開數

調整內核參數文件 /etc/syctl.conf

配置網絡參數來提升系統負載能力
若是出現服務器丟包的狀況,須要考慮是否是以下配置須要調整併發

vim /etc/syctl.conf

net.ipv4.tcp_syncookies = 1socket

表示開啓SYN Cookies。當出現SYN等待隊列溢出時,啓用cookies來處理,可防範少許SYN攻擊,默認爲0,表示關閉;

net.ipv4.tcp_tw_reuse = 1tcp

表示開啓重用。容許將TIME-WAIT sockets從新用於新的TCP鏈接,默認爲0,表示關閉;

net.ipv4.tcp_tw_recycle = 1高併發

表示開啓TCP鏈接中TIME-WAIT sockets的快速回收,默認爲0,表示關閉。

net.ipv4.tcp_fin_timeout = 30

表示若是套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間。

net.ipv4.tcp_keepalive_time = 1200

表示當keepalive起用的時候,TCP發送keepalive消息的頻度。缺省是2小時,改成20分鐘。

net.ipv4.ip_local_port_range = 1024 65000

表示用於向外鏈接的端口範圍。缺省狀況下很小:32768到61000,改成1024到65000。

net.ipv4.tcp_max_syn_backlog = 8192

表示SYN隊列的長度,默認爲1024,加大隊列長度爲8192,能夠容納更多等待鏈接的網絡鏈接數。

net.nf_conntrack_max = 655360

在內核內存中netfilter能夠同時處理的「任務」(鏈接跟蹤條目)

防火牆配置

/etc/syctl 尾部加上以下防火牆相關配置

有多是sysctl.conf.first文件

開啓重用,回收 socket資源用於新的TCP連接

net.ipv4.tcp_tw_reuse=1

開啓回收:

net.ipv4.tcp_tw_recycle=1

網絡連接最大值及超時配置

net.nf_conntrack_max = 25000000
net.netfilter.nf_conntrack_max = 25000000
net.netfilter.nf_conntrack_tcp_timeout_established = 180
net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120

net.nf_conntrack_max

決定鏈接跟蹤表的大小,默認值是65535,能夠根據系統內存大小計算一個合理值:> CONNTRACK_MAX = RAMSIZE(in bytes)/16384/(ARCH/32),如32G內存能夠設置1048576;

nf_conntrack_buckets

決定存儲conntrack條目的哈希表大小,默認值是nf_conntrack_max的1/4,延續這種計算方式:BUCKETS = > CONNTRACK_MAX/4,如32G內存能夠設置262144;

net.netfilter.nf_conntrack_max

最大鏈接數

net.netfilter.nf_conntrack_tcp_timeout_established

決定ESTABLISHED狀態鏈接的超時時間,默認值是5天,能夠縮短到1小時,即3600。

net.netfilter.nf_conntrack_tcp_timeout_time_wait

決定WAIT狀態鏈接的超時等待時間

net.netfilter.nf_conntrack_tcp_timeout_close_wait

決定關閉狀態鏈接的超時等待時間

net.netfilter.nf_conntrack_tcp_timeout_fin_wait

決定WAIT狀態鏈接的超時等待時間

使以上配置生效

sysctl –p

常見異常

  • too many open files(打開的文件過多)

程序在Linux系統中常見的錯誤,從字面意思上看就是說程序打開的文件數過多,不過這裏的files不單是文件的意思,也包括打開的通信連接(好比socket),正在監聽的端口等等,因此有時候也能夠叫作句柄(handle),這個錯誤一般也能夠叫作句柄數超出系統限制。

在高併發狀況或者程序代碼中沒有正確關閉IO, 並系統限制比較小的狀況下,系統在運行一段時間後,程序打開句柄數超過系統限制的時候拋出該異常

解決方法:加大系統文件描述符最大值
  • 鏈接服務器超時

通常TimeWait進程數過多,緣由通常爲應用程序沒有正確關閉鏈接,致使服務器TIME_WAIT進程過多,主動關閉鏈接致使TIME_WAIT產生。先檢查程序及系統以上配置

解決方法:解決程序問題,檢查系統內核網絡及防火牆內核設置

常見命令

查看機器網絡狀態狀態

netstat -n | awk '/^tcp/ {++state[$NF]} END {for(key in state) print key,"\t",state[key]}'LAST_ACK

狀態:描述

CLOSED:無鏈接是活動的或正在進行
LISTEN:服務器在等待進入呼叫
SYN_RECV:一個鏈接請求已經到達,等待確認
SYN_SENT:應用已經開始,打開一個鏈接
ESTABLISHED:正常數據傳輸狀態
FIN_WAIT1:應用說它已經完成
FIN_WAIT2:另外一邊已贊成釋放
ITMED_WAIT:等待全部分組死掉
CLOSING:兩邊同時嘗試關閉
TIME_WAIT:另外一邊已初始化一個釋放
LAST_ACK:等待全部分組死掉

總結

Linux提供了豐富的內核參數供使用者調整,調整得當能夠大幅提升服務器的處理能力

思考題

  1. 線上應用系統出現問題,怎麼快速定位系統哪塊資源問題
相關文章
相關標籤/搜索