1. 程式人生 > >Linux 相關優化

Linux 相關優化

sock time_wait admin 8K nal test 內存空間 更改 nginx服務

lvs 四層 dr 直接返回給用戶
支持大並發 四層負載均衡 復雜 不能更改端口
lvs負載均衡 (大並發) NGINX 實現web動靜分離 移動和pc分離
解決 WEB高並發


mysql優化參數調整
打開MySQL配置文件my.cnf
1 back_log參數值:由默認的50修改為500.(每個連接256kb,占用:125M)
back_log=500
值指出在MySQL暫時停止回答新請求之前的短時間內多少個請求可以被存在堆棧中。也就是說,如果MySql的連接數據達到max_connections時,新來的請求將會被存在堆棧中,以等待某一連接釋放資源,該堆棧的數量即back_log,如果等待連接的數量超過back_log,將不被授予連接資源。將會報:unauthenticated user | xxx.xxx.xxx.xxx | NULL | Connect | NULL | login | NULL 的待連接進程時.
back_log值不能超過TCP/IP連接的偵聽隊列的大小。若超過則無效,查看當前系統的TCP/IP連接的偵聽隊列的大小命令:cat /proc/sys/net/ipv4/tcp_max_syn_backlog目前系統為1024。對於Linux系統推薦設置為小於512的整數。

修改系統內核參數,)
查看mysql 當前系統默認back_log值,命令:
show variables like ‘back_log‘; 查看當前數量
2 改wait_timeout參數值,由默認的8小時,修改為30分鐘。(本次不用)
wait_timeout=1800(單位為妙)MySQL客戶端的數據庫連接閑置最大時間值
網站有大量的MySQL鏈接請求(每個MySQL連接都是要內存資源開銷的 ),由於你的程序的原因有大量的連接請求空閑啥事也不幹,白白占用內存資源,或者導致MySQL超過最大連接數從來無法新建連接導致“Too many connections”的錯誤
3修改max_connections參數值,由默認的151,修改為3000(750M)。
max_connections=3000
max_connections是指MySql的最大連接數,如果服務器的並發連接請求量比較大,建議調高此值,以增加並行連接數量,當然這建立在機器能支撐的情況下,因為如果連接數越多,介於MySql會為每個連接提供連接緩沖區,就會開銷越多的內存,所以要適當調整該值,不能盲目提高設值
4修改max_user_connections值,由默認的0,修改為800
max_user_connections=800 是指每個數據庫用戶的最大連接
5修改thread_concurrency值,由目前默認的8,修改為64
thread_concurrency=64
thread_concurrency應設為CPU核數的2倍. 比如有一個雙核的CPU, 那thread_concurrency 的應該為4; 2個雙核的cpu, thread_concurrency的值應為8
6default-storage-engine(設置MySQL的默認存儲引擎)
default-storage-engine= InnoDB(設置InnoDB類型(支持實物類型),另外還可以設置MyISAM(讀多寫少建立引擎)
二 全局緩存
動MySQL時就要分配並且總是存在的全局緩存。目前有:key_buffer_size(默認值:402653184,即384M)、innodb_buffer_pool_size(默認值:134217728即:128M)、innodb_additional_mem_pool_size(默認值:8388608即:8M)、innodb_log_buffer_size(默認值:8388608即:8M)、query_cache_size(默認值:33554432即:32M)等五個。總共:560M.
這些變量值都可以通過命令如:show variables like ‘變量名‘;查看到。
三 局部緩存
read_buffer_size(默認值:2097144即2M)
read_buffer_size=4M是MySql讀入緩沖區大小。對表進行順序掃描的請求將分配一個讀入緩沖區,MySql會為它分配一段內存緩沖區。read_buffer_size變量控制這一

緩沖區的大小。如果對表的順序掃描請求非常頻繁,並且你認為頻繁掃描進行得太慢,可以通過增加該變量值以及內存緩沖區大小提高其性能.
sort_buffer_size,read_rnd_buffer_size,tmp_table_size 大小的內存空間. 不過它們只是在需要的時候才分配,並且在那些操作做完之後就釋放了。有的是立刻分配成單獨的組塊。tmp_table_size 可能高達MySQL所能分配給這個操作的最大內存空間
四 其他緩存
thread_cache_size (服務器線程緩存)
table_cache(默認值:512)

#######################################################
NGINX優化
1 worker_processes 1;一般調整到與CPU的顆數相同
2 優化綁定不同的nginx進程到不同的CPU上
3 nginx事件處理模型優化
4 調整nginx單個進程允許的客戶端最大連接數
參數語法:worker_connections number
默認配置:worker_connections 512
放置位置:events 標簽  
events {
worker_connections 1024; #一個worker進程的並發
}
總並發= worker_processes* worker_connections
5 配置nginx worker進程最大打開文件數
參數語法:worker_rlimit_nofile number
放置位置:主標簽段
說明:作用是改變worker processes能打開的最大文件數
worker_rlimit_nofile 65535;
這各參數受系統文件的最大打開數限制,解決方法:
[root@admin nginx]# cat /proc/sys/fs/file-max
8192
文件系統最大可打開文件數
[root@admin nginx]# ulimit -n
1024
程序限制只能打開1024個文件
使用# ulimit -n 8192調整一下
或者永久調整打開文件數 可在啟動文件/etc/rc.d/rc.local末尾添加(在/etc/sysctl.conf末尾添加fs.file-max=xxx無效)
6 開啟高效文件傳輸模式
設置參數 sendfile on;
sendfile參數用於開啟文件的高效傳輸模式。同時將tcp_nopush和tcp_nodelay兩個指令設置為on,可防止網絡及磁盤i/o阻塞,提升nginx工作效率。
http {
  sendfile on; #放在http,server,location都可以
7 FastCGI相關參數調優
fastcgi_connect_timeout 240;
fastcgi_send_timeout 240;
fastcgi_read_timeout 240;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;
#fastcgi_temp_path /data/ngx_fcgi_tmp;
fastcgi_cache_path /data/ngx_fcgi_cache levels=2:2 keys_zone=ngx_fcgi_cache:512m inactive=1d max_size=40g;
8 部署網站程序權限設置
目錄:755
文件:644
所有者:root
cd /application/apache/html/
chown -R root.root blog
find ./blog/ -type f|xargs chmod 644
find ./blog/ -type d|xargs chmod 755
9. 控制Nginx並發連接數量
  ngx_http_limit_conn_module這個模塊用於限制每個定義key值得連接數,特別是單個TP的連接數。
  不是所有的連接數都會被計算。一個符合計數要求的連接是整個請求頭已經被讀取的連接。
控制Nginx並發連接數量參數的說明
  1)limit_conn_zone參數:
    語法:limit_conn_zone key zone=name:size;
    上下文:http
    用於設置共享內存區域,key可以是字符串、Nginx自帶變量或前兩個組合。name為內存區域的名稱,size為內存區域的大小。

  2)limit_conn參數
    語法:limit_conn zone number;
    上下文:http、server、location
    用於指定key設置最大連接數。當超時最大連接數時,服務器會返回503報錯。

10. 控制客戶端請求Nginx的速率
  ngx_http_limit_req_module模塊用於限制每個IP訪問每個定義key的請求速率。
limit_req_zone參數說明如下。
    語法:limit_req_zone key zone=name:size rate=rate;
    上下文:http
    用於設置共享內存區域,key可以是字符串,Nginx自帶變量或前兩個組合。name為內存區域的名稱,size為內存區域的大小,rate為速率,單位為r/s,每秒一個請求。
  limit_req參數說明如下:
    語法:limit_req zone=name [burst-number] [nobelay]
    上下文:http、server、location
    這裏運用了令牌桶原理,burst=num,一個有num快令牌,令牌發完後,多出來的那些請求就會返回503。
  nodelay默認在不超過burst值得前提下會排隊等待處理,如果使用此參數,就會處理完num+1次請求,剩余的請求為超時,返回503。
###########################################################
修改Linux內核參數提高Nginx服務器在高的時候的性能
TCP TIME_WAIT套接字數量經常達到兩、三萬,服務器很容易被拖死。通過修改Linux內核參數,可以減少Nginx服務器的TIME_WAIT套接字數量

vi /etc/sysctl.conf
  增加以下幾行:
  引用
  net.ipv4.tcp_fin_timeout = 30
  net.ipv4.tcp_keepalive_time = 1200
  net.ipv4.tcp_syncookies = 1
  net.ipv4.tcp_tw_reuse = 1
  net.ipv4.tcp_tw_recycle = 1
  net.ipv4.ip_local_port_range = 1024 65000
  net.ipv4.tcp_max_syn_backlog = 8192
  net.ipv4.tcp_max_tw_buckets = 5000
net.ipv4.tcp_syncookies = 1 表示開啟SYN Cookies。當出現SYN等待隊列溢出時,啟用cookies來處理,可防範少量SYN攻擊,默認為0,表示關閉;
  net.ipv4.tcp_tw_reuse = 1 表示開啟重用。允許將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.ipv4.tcp_max_tw_buckets = 5000 表示系統同時保持TIME_WAIT套接字的最大數量,如果超過這個數字,TIME_WAIT套接字將立刻被清除並打印警告信息。默認為180000,改為5000。對於Apache、Nginx等服務器,上幾行的參數可以很好地減少TIME_WAIT套接字數量,但是對於Squid,效果卻不大。此項參數可以控制TIME_WAIT套接字的最大數量,避免Squid服務器被大量的TIME_WAIT套接字拖死。
更改linux內核參數後,立即生效的命令!
  /sbin/sysctl -p
Nginx優化
  使用FastCGI 緩存
  fastcgi_cache TEST
  開啟FastCGI 緩存並且為其制定一個名稱。個人感覺開啟緩存非常有用,可以有效降低CPU 負載,並且防止502 錯誤。
  fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2
  keys_zone=TEST:10m
  inactive=5m;
  這個指令為FastCGI 緩存指定一個路徑,目錄結構等級,關鍵字區域存儲時間和非活動刪除時間。

Linux 相關優化