面試時常常問到的系統應用優化問題總結

優化

本文 centos 6.5 優化 的項有18處:javascript

  1. centos6.5最小化安裝後啓動網卡
  2. ifconfig查詢IP進行SSH連接
  3. 更新系統源而且升級系統
  4. 系統時間更新和設定定時任
  5. 修改ip地址、網關、主機名、DNS
  6. 關閉selinux,清空iptables
  7. 建立普通用戶並進行sudo受權管理
  8. 修改SSH端口號和屏蔽root帳號遠程登錄
  9. 鎖定關鍵文件系統(禁止非受權用戶得到權限)
  10. 精簡開機自啓動服務
  11. 調整系統文件描述符大小
  12. 設置系統字符集
  13. 清理登錄的時候顯示的系統及內核版本
  14. 內核參數優化
  15. 定時清理/var/spool/clientmqueue(6之後無需)
  16. 刪除沒必要要的系統用戶和羣組
  17. 關閉重啓ctl-alt-delete組合鍵
  18. 設置一些全局變量

tomcat

JVM參數,調整初始值和最大值:Xmx(最大 Xms(初始)php

-Xms JVM初始化堆內存大小 
-Xmx JVM堆的最大內存 
-Xss 線程棧大小 
-XX:PermSize JVM非堆區初始內存分配大小 
-XX:MaxPermSize JVM非堆區最大內存

關閉自動部署unpackWARs="true" autoDeploy="true"css

最大線程數,最大排隊數:`max_thread(默認值是200) acceptCounthtml

connector運行模式:BIO(同步阻塞,消耗資源要高) NIO(同步非阻塞,鏈接數目多且比較短適合) APR(異步非阻塞,鏈接數目多且鏈接時間長)java

網絡連接超時時間:connectionTimeoutnode

關閉DNS反查詢:enableLookupsmysql

保持長鏈接的時間:keepAliveTimeoutlinux

空閒等待線程數:minSpaceThreadnginx

nginx優化

user nginx;
pid /var/run/nginx.pid;
#通常爲cpu的內核數
worker_processes auto;

#修改work進程的最大文件打開數量
worker_rlimit_nofile 100000;

events {
    #每一個work進程的最大鏈接數
    worker_connections 2048;
    #告訴nginx收到一個新鏈接通知後接受盡量多的鏈接
    multi_accept on;
    #使用異步I/O多路複用
    use epoll;
}

http {
     #關閉在錯誤頁面中的nginx版本數字
    server_tokens off;
    #開啓 當即將數據從磁盤讀到OS緩存
    sendfile on;
    #nginx在一個數據包裏發送全部頭文件,而不一個接一個的發送
    tcp_nopush on;
    #nginx不要緩存數據,而是一段一段的發送
    tcp_nodelay on;
    
    #日誌設置
    access_log off;
    error_log /var/log/nginx/error.log crit;
    
     #給客戶端分配keep-alive連接超時時間
    keepalive_timeout 10;
    #設置請求頭和請求體(各自)的超時時間
    client_header_timeout 10;
    client_body_timeout 10;
    #關閉不響應的客戶端鏈接。
    reset_timedout_connection on;
    #指定客戶端的響應超時時間
    send_timeout 10;

     #設置用於保存各類key(好比當前鏈接數)的共享內存的參數
    limit_conn_zone $binary_remote_addr zone=addr:5m;
    #爲給定的key設置最大鏈接數
    limit_conn addr 100;
    
     #加載mime文件,設置字符集,設置默認的mime類型
    include /etc/nginx/mime.types;
    default_type text/html;
    charset UTF-8;

     #開啓壓縮
    gzip on;
    #指定客戶端禁用,提升兼容性
    gzip_disable "msie6";
    # 容許或者禁止壓縮基於請求和響應的響應流
    gzip_proxied any;
    #設置對數據啓用壓縮的最少字節數
    gzip_min_length 1000;
    #設置數據的壓縮等級
    gzip_comp_level 6;
    #設置須要壓縮的數據格式
    gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
    
    #打開緩存的同時也指定了緩存最大數目,以及緩存的時間
    open_file_cache max=100000 inactive=20s;
    #指定檢測正確信息的間隔時間
    open_file_cache_valid 30s;
    #指令參數不活動時間期間裏最小的文件數
    open_file_cache_min_uses 2;
    #是否緩存錯誤信息,也包括再次給配置中添加文件
    open_file_cache_errors on;

    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites-enabled/*;
}

linux內核優化

#設置內核所容許的最大共享內存段的大小
kernel.shmall = 268435456

# 開啓惡意icmp錯誤消息保護
net.ipv4.icmp_ignore_bogus_error_responses = 1

#修改消息隊列長度
kernel.msgmnb = 65536
kernel.msgmax = 65536

#開啓syn cookies,防止syn攻擊
net.ipv4.tcp_syncookies = 1
#開啓time-wait ,容許socket重用
net.ipv4.tcp_tw_reuse = 1
#開啓socket快速回收
net.ipv4.tcp_tw_recycle = 1
#定義保持在fin_wait_2的時間
net.ipv4.tcp_fin_timeout = 30
#修改會話保持時間,默認2小時
net.ipv4.tcp_keepalive_time = 1200
#修改對外鏈接端口範圍
net.ipv4.ip_local_port_range = 1024 65000
#修改系統同時保持time_out套接字的最大數量
net.ipv4.tcp_max_tw_buckets = 5000

#設置tcp內存單位閥值,低於第一無壓力,在第二值進入壓力,大於第三個值TCP不分配socket
net.ipv4.tcp_mem = 786432 1048576 1572864

#最大socket寫buffer緩衝
net.core.wmem_max = 873200
#最大讀buffer
net.core.rmem_max = 873200
#最大tcp寫buffer
net.ipv4.tcp_wmem = 8192 436600 873200
#最大讀buffer
net.ipv4.tcp_rmem = 32768 436600 873200

net.core.somaxconn = 256
net.core.netdev_max_backlog = 1000
#設置syn消息列隊的長度
net.ipv4.tcp_max_syn_backlog = 2048
# 在內核放棄創建鏈接以前發送SYN 包的數量
net.ipv4.tcp_retries2 = 5

#設置請求探測的時間間隔和請求重發次數
net.ipv4.tcp_keepalive_intvl = 30
net.ipv4.tcp_keepalive_probes = 3

#關閉路由相關功能
net.ipv4.conf.lo.arp_ignore = 0
net.ipv4.conf.lo.arp_announce = 0
net.ipv4.conf.all.arp_ignore = 0
net.ipv4.conf.all.arp_announce = 0

#禁用IPV4轉發
net.ipv4.ip_forward = 0

#如下參數是對centos6.x的iptables防火牆的優化,防火牆不開會有提示,能夠忽略不理。
#若是是centos5.X須要吧netfilter.nf_conntrack替換成ipv4.netfilter.ip
#centos5.X爲net.ipv4.ip_conntrack_max = 25000000
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.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
#修改系統默認的 TIMEOUT 時間。
###########
#在通過這樣的調整以後,除了會進一步提高服務器的負載能力以外,還可以防護小流量程度的DoS、CC和SYN攻擊。
########
此外,若是你的鏈接數自己就不少,咱們能夠再優化一下TCP的可以使用端口範圍,進一步提高服務器的併發能力。依然是往上面的參數文件中,加入下面這些配置:
##################

net.ipv4.tcp_keepalive_time = 1200
net.ipv4.ip_local_port_range = 10000 65000
net.ipv4.tcp_max_syn_backlog = 8192
net.ipv4.tcp_max_tw_buckets = 5000
#這幾個參數,建議只在流量很是大的服務器上開啓,會有顯著的效果。通常的流量小的服務器上,沒有必要去設置這幾個參數。

net.ipv4.tcp_keepalive_time = 1200
#表示當keepalive起用的時候,TCP發送keepalive消息的頻度。缺省是2小時,改成20分鐘。
net.ipv4.ip_local_port_range = 10000 65000
#表示用於向外鏈接的端口範圍。缺省狀況下很小:32768到61000,改成10000到65000。(注意:這裏不要將最低值設的過低,不然可能會佔用掉正常的端口!)

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

net.ipv4.tcp_max_tw_buckets = 6000
#表示系統同時保持TIME_WAIT的最大數量,若是超過這個數字,TIME_WAIT將馬上被清除並打印警告信息。默 認爲180000,改成6000。對於Apache、Nginx等服務器,上幾行的參數能夠很好地減小TIME_WAIT套接字數量,可是對於Squid,效果卻不大。此項參數能夠控制TIME_WAIT的最大數量,避免Squid服務器被大量的TIME_WAIT拖死。

#####################
內核其餘TCP參數說明:
net.ipv4.tcp_max_syn_backlog = 65536
#記錄的那些還沒有收到客戶端確認信息的鏈接請求的最大值。對於有128M內存的系統而言,缺省值是1024,小內存的系統則是128。

net.core.netdev_max_backlog = 32768
#每一個網絡接口接收數據包的速率比內核處理這些包的速率快時,容許送到隊列的數據包的最大數目。

net.core.somaxconn = 32768
#web應用中listen函數的backlog默認會給咱們內核參數的net.core.somaxconn限制到128,而nginx定義的NGX_LISTEN_BACKLOG默認爲511,因此有必要調整這個值。

net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216           
#最大socket讀buffer,可參考的優化值:873200

net.core.wmem_max = 16777216           
#最大socket寫buffer,可參考的優化值:873200

net.ipv4.tcp_timestsmps = 0
#時間戳能夠避免序列號的卷繞。一個1Gbps的鏈路確定會遇到之前用過的序列號。時間戳可以讓內核接受這種「異常」的數據包。這裏須要將其關掉。

net.ipv4.tcp_synack_retries = 2
#爲了打開對端的鏈接,內核須要發送一個SYN並附帶一個迴應前面一個SYN的ACK。也就是所謂三次握手中的第二次握手。這個設置決定了內核放棄鏈接以前發送SYN+ACK包的數量。

net.ipv4.tcp_syn_retries = 2
#在內核放棄創建鏈接以前發送SYN包的數量。
#net.ipv4.tcp_tw_len = 1
net.ipv4.tcp_tw_reuse = 1
# 開啓重用。容許將TIME-WAIT sockets從新用於新的TCP鏈接。

net.ipv4.tcp_wmem = 8192 436600 873200
# TCP寫buffer,可參考的優化值: 8192 436600 873200

net.ipv4.tcp_rmem  = 32768 436600 873200
# TCP讀buffer,可參考的優化值: 32768 436600 873200
net.ipv4.tcp_mem = 94500000 91500000 92700000

# 一樣有3個值,意思是:
net.ipv4.tcp_mem[0]:低於此值,TCP沒有內存壓力。
net.ipv4.tcp_mem[1]:在此值下,進入內存壓力階段。
net.ipv4.tcp_mem[2]:高於此值,TCP拒絕分配socket。
上述內存單位是頁,而不是字節。可參考的優化值是:786432 1048576 1572864

net.ipv4.tcp_max_orphans = 3276800
#系統中最多有多少個TCP套接字不被關聯到任何一個用戶文件句柄上。
#若是超過這個數字,鏈接將即刻被複位並打印出警告信息。
#這個限制僅僅是爲了防止簡單的DoS攻擊,不能過度依靠它或者人爲地減少這個值,
#更應該增長這個值(若是增長了內存以後)。

net.ipv4.tcp_fin_timeout = 30
#若是套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間。對端能夠出錯並永遠不關閉鏈接,甚至意外當機。缺省值是60秒。2.2 內核的一般值是180秒,你能夠按這個設置,但要記住的是,即便你的機器是一個輕載的WEB服務器,也有由於大量的死套接字而內存溢出的風險,FIN- WAIT-2的危險性比FIN-WAIT-1要小,由於它最多隻能吃掉1.5K內存,可是它們的生存期長些。

PHP優化

下面開始優化php配置,vi php/etc/php-fpm.confweb

#若是dm設置爲dynamic,那麼pm.max_children參數失效,後面3個參數生效,若是dm設置爲static,那麼只有pm.max_children這個參數生效。
pm=dynamic
#設置php-fpm初始/空閒/最大worker進程數
#靜態方式下開啓的php-fpm進程數量。
pm.max_children = 300
#動態方式下的起始php-fpm進程數量。
pm.start_servers = 20
#動態方式下的最小php-fpm進程數量。
pm.min_spare_servers = 5
#動態方式下的最大php-fpm進程數量
pm.max_spare_servers = 35


##增大php-fpm對打開文件描述符的限制
rlimit_files = 65536

##設置容許訪問Fastcgi進程解析器的IP地址,更加安全
listen.allowed_clients = 127.0.0.1

##增大請求緩衝隊列大小,默認爲128,有點小,增大這個參數,能夠解決系統日誌中攻擊提示問題以及nginx錯誤日誌中的連接錯誤。
listen.backlog = 2048

#真大最大請求數      
pm.max_requests = 1024由 500改成1024

nginx.conf fastCGI設置:

fastcgi_temp_path /dev/shm/fastcgi_temp;
#cache設置
fastcgi_cache_path /dev/shm/fastcgi_cache levels=1:2
keys_zone=cfcache:10m inactive=50m max_size=256;
//爲FastCGI緩存指定一個路徑,目錄結構等級,關鍵字區域存儲時間和非活動刪除時間。以及最大佔用空間。
fastcgi_cache_key 「$request_method://$host$request_uri」;
fastcgi_cache_methods GET HEAD;
fastcgi_cache   cfcache;  //開啓FastCGI緩存而且爲其制定一個名稱。
fastcgi_cache_valid 200 302 301 1h;
fastcgi_cache_valid   any 5m;   //爲指定應答代碼指定緩存時間,這裏指定200 302 301應答緩存1小時,其他任何應答緩存5分鐘
fastcgi_cache_min_uses  1;  //緩存在fastcgi_cache_path內文件在inactive參數值時間內的最少使用次數,如上例,這裏在50分鐘內某文件1次也沒有被使用,那麼這個文件將被移除。
fastcgi_cache_use_stale error  timeout invalid_header http_500;//對於error timeout invalid_header http_500等類型的應答內容不緩存
fastcgi_ignore_client_abort on;//忽略客戶端終止請求
#指定鏈接到後端FastCGI的超時時間
fastcgi_connect_timeout 300;
#向FastCGI傳送請求的超時時間,這個值是指已經完成兩次握手後向FastCGI傳送請求的超時時間。
fastcgi_send_timeout 300;
#接收FastCGI應答的超時時間,這個值是指已經完成兩次握手後接收FastCGI應答的超時時間。
fastcgi_read_timeout 300;
#指定讀取FastCGI應答第一部分須要用多大的緩衝區
fastcgi_buffer_size 64k;
#指定本地須要用多少和多大的緩衝區來緩衝FastCGI的應答,
fastcgi_buffers 4 64k;
#默認值是fastcgi_buffers的兩倍
fastcgi_busy_buffers_size 128k;
#在寫入fastcgi_temp_path時將用多大的數據塊,默認值是fastcgi_buffers的兩倍。
fastcgi_temp_file_write_size 128k;

fastcgi_intercept_errors on;

mysql優化

[b]PS:本配置文件針對Dell R710,雙至強E5620、16G內存的硬件配置。CentOS 5.6 64位系統,MySQL 5.5.x 穩定版。適用於日IP 50-100w,PV 100-300w的站點,主要使用InnoDB存儲引擎。其餘應用環境請根據實際狀況來設置優化。[/b]  
  
# 如下選項會被MySQL客戶端應用讀取。  
# 注意只有MySQL附帶的客戶端應用程序保證能夠讀取這段內容。  
# 若是你想你本身的MySQL應用程序獲取這些值。  
# 須要在MySQL客戶端庫初始化的時候指定這些選項。  
  
#  
[client]  
#password = [your_password]  
port = @MYSQL_TCP_PORT@  
socket = @MYSQL_UNIX_ADDR@  
  
# *** 應用定製選項 ***  
  
#  
# MySQL 服務端  
#  
[mysqld]  
  
# 通常配置選項  
port = @MYSQL_TCP_PORT@  
socket = @MYSQL_UNIX_ADDR@  
  
# back_log 是操做系統在監聽隊列中所能保持的鏈接數,  
# 隊列保存了在MySQL鏈接管理器線程處理以前的鏈接.  
# 若是你有很是高的鏈接率而且出現」connection refused」 報錯,  
# 你就應該增長此處的值.  
# 檢查你的操做系統文檔來獲取這個變量的最大值.  
# 若是將back_log設定到比你操做系統限制更高的值,將會沒有效果  
back_log = 300  
  
# 不在TCP/IP端口上進行監聽.  
# 若是全部的進程都是在同一臺服務器鏈接到本地的mysqld,  
# 這樣設置將是加強安全的方法  
# 全部mysqld的鏈接都是經過Unix sockets 或者命名管道進行的.  
# 注意在windows下若是沒有打開命名管道選項而只是用此項  
# (經過 「enable-named-pipe」 選項) 將會致使mysql服務沒有任何做用!  
#skip-networking  
  
# MySQL 服務所容許的同時會話數的上限  
# 其中一個鏈接將被SUPER權限保留做爲管理員登陸.  
# 即使已經達到了鏈接數的上限.  
max_connections = 3000  

# 每一個客戶端鏈接最大的錯誤容許數量,若是達到了此限制.  
# 這個客戶端將會被MySQL服務阻止直到執行了」FLUSH HOSTS」 或者服務重啓  
# 非法的密碼以及其餘在連接時的錯誤會增長此值.  
# 查看 「Aborted_connects」 狀態來獲取全局計數器.  
max_connect_errors = 30  
  
# 全部線程所打開表的數量.  
# 增長此值就增長了mysqld所須要的文件描述符的數量  
# 這樣你須要確認在[mysqld_safe]中 「open-files-limit」 變量設置打開文件數量容許至少4096  
table_cache = 4096  
  
# 容許外部文件級別的鎖. 打開文件鎖會對性能形成負面影響  
# 因此只有在你在一樣的文件上運行多個數據庫實例時才使用此選項(注意仍會有其餘約束!)  
# 或者你在文件層面上使用了其餘一些軟件依賴來鎖定MyISAM表  
#external-locking  
  
# 服務所能處理的請求包的最大大小以及服務所能處理的最大的請求大小(當與大的BLOB字段一塊兒工做時至關必要)  
# 每一個鏈接獨立的大小.大小動態增長  
max_allowed_packet = 32M  
  
# 在一個事務中binlog爲了記錄SQL狀態所持有的cache大小  
# 若是你常用大的,多聲明的事務,你能夠增長此值來獲取更大的性能.  
# 全部從事務來的狀態都將被緩衝在binlog緩衝中而後在提交後一次性寫入到binlog中  
# 若是事務比此值大, 會使用磁盤上的臨時文件來替代.  
# 此緩衝在每一個鏈接的事務第一次更新狀態時被建立  
binlog_cache_size = 4M  
  
# 獨立的內存表所容許的最大容量.  
# 此選項爲了防止意外建立一個超大的內存表致使永盡全部的內存資源.  
max_heap_table_size = 128M  
  
# 排序緩衝被用來處理相似ORDER BY以及GROUP BY隊列所引發的排序  
# 若是排序後的數據沒法放入排序緩衝,  
# 一個用來替代的基於磁盤的合併分類會被使用  
# 查看 「Sort_merge_passes」 狀態變量.  
# 在排序發生時由每一個線程分配  
sort_buffer_size = 16M  
  
# 此緩衝被使用來優化全聯合(full JOINs 不帶索引的聯合).  
# 相似的聯合在極大多數狀況下有很是糟糕的性能表現,  
# 可是將此值設大可以減輕性能影響.  
# 經過 「Select_full_join」 狀態變量查看全聯合的數量  
# 當全聯合發生時,在每一個線程中分配  
join_buffer_size = 16M  
  
# 咱們在cache中保留多少線程用於重用  
# 當一個客戶端斷開鏈接後,若是cache中的線程還少於thread_cache_size,  
# 則客戶端線程被放入cache中.  
# 這能夠在你須要大量新鏈接的時候極大的減小線程建立的開銷  
# (通常來講若是你有好的線程模型的話,這不會有明顯的性能提高.)  
thread_cache_size = 16  
  
# 此容許應用程序給予線程系統一個提示在同一時間給予渴望被運行的線程的數量.  
# 此值只對於支持 thread_concurrency() 函數的系統有意義( 例如Sun Solaris).  
# 你可能夠嘗試使用 [CPU數量]*(2..4) 來做爲thread_concurrency的值  
thread_concurrency = 8  
  
# 查詢緩衝常被用來緩衝 SELECT 的結果而且在下一次一樣查詢的時候再也不執行直接返回結果.  
# 打開查詢緩衝能夠極大的提升服務器速度, 若是你有大量的相同的查詢而且不多修改表.  
# 查看 「Qcache_lowmem_prunes」 狀態變量來檢查是否當前值對於你的負載來講是否足夠高.  
# 注意: 在你表常常變化的狀況下或者若是你的查詢原文每次都不一樣,  
# 查詢緩衝也許引發性能降低而不是性能提高.  
query_cache_size = 128M  
  
# 只有小於此設定值的結果纔會被緩衝  
# 此設置用來保護查詢緩衝,防止一個極大的結果集將其餘全部的查詢結果都覆蓋.  
query_cache_limit = 4M  
  
# 被全文檢索索引的最小的字長.  
# 你也許但願減小它,若是你須要搜索更短字的時候.  
# 注意在你修改此值以後,  
# 你須要重建你的 FULLTEXT 索引  
ft_min_word_len = 8  
  
# 若是你的系統支持 memlock() 函數,你也許但願打開此選項用以讓運行中的mysql在在內存高度緊張的時候,數據在內存中保持鎖定而且防止可能被swapping out  
# 此選項對於性能有益  
#memlock  
  
# 當建立新表時做爲默認使用的表類型,  
# 若是在建立表示沒有特別執行表類型,將會使用此值  
default_table_type = MYISAM  
  
# 線程使用的堆大小. 此容量的內存在每次鏈接時被預留.  
# MySQL 自己常不會須要超過64K的內存  
# 若是你使用你本身的須要大量堆的UDF函數  
# 或者你的操做系統對於某些操做須要更多的堆,  
# 你也許須要將其設置的更高一點.  
thread_stack = 512K  
  
# 設定默認的事務隔離級別.可用的級別以下:  
# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE  
transaction_isolation = REPEATABLE-READ  
  
# 內部(內存中)臨時表的最大大小  
# 若是一個表增加到比此值更大,將會自動轉換爲基於磁盤的表.  
# 此限制是針對單個表的,而不是總和.  
tmp_table_size = 128M  
  
# 打開二進制日誌功能.  
# 在複製(replication)配置中,做爲MASTER主服務器必須打開此項  
# 若是你須要從你最後的備份中作基於時間點的恢復,你也一樣須要二進制日誌.  
log-bin=mysql-bin  
  
# 若是你在使用鏈式從服務器結構的複製模式 (A->B->C),  
# 你須要在服務器B上打開此項.  
# 此選項打開在從線程上重作過的更新的日誌,  
# 並將其寫入從服務器的二進制日誌.  
#log_slave_updates  
  
# 打開全查詢日誌. 全部的由服務器接收到的查詢 (甚至對於一個錯誤語法的查詢)  
# 都會被記錄下來. 這對於調試很是有用, 在生產環境中經常關閉此項.  
#log  
  
# 將警告打印輸出到錯誤log文件. 若是你對於MySQL有任何問題  
# 你應該打開警告log而且仔細審查錯誤日誌,查出可能的緣由.  
#log_warnings  
  
# 記錄慢速查詢. 慢速查詢是指消耗了比 「long_query_time」 定義的更多時間的查詢.  
# 若是 log_long_format 被打開,那些沒有使用索引的查詢也會被記錄.  
# 若是你常常增長新查詢到已有的系統內的話. 通常來講這是一個好主意,  
log_slow_queries  
  
# 全部的使用了比這個時間(以秒爲單位)更多的查詢會被認爲是慢速查詢.  
# 不要在這裏使用」1″, 不然會致使全部的查詢,甚至很是快的查詢頁被記錄下來(因爲MySQL 目前時間的精確度只能達到秒的級別).  
long_query_time = 6  
  
# 在慢速日誌中記錄更多的信息.  
# 通常此項最好打開.  
# 打開此項會記錄使得那些沒有使用索引的查詢也被做爲到慢速查詢附加到慢速日誌裏  
log_long_format  
  
# 此目錄被MySQL用來保存臨時文件.例如,  
# 它被用來處理基於磁盤的大型排序,和內部排序同樣.  
# 以及簡單的臨時表.  
# 若是你不建立很是大的臨時文件,將其放置到 swapfs/tmpfs 文件系統上也許比較好  
# 另外一種選擇是你也能夠將其放置在獨立的磁盤上.  
# 你可使用」;」來放置多個路徑  
# 他們會按照roud-robin方法被輪詢使用.  
#tmpdir = /tmp  
  
# *** 主從複製相關的設置  
  
# 惟一的服務辨識號,數值位於 1 到 2^32-1之間.  
# 此值在master和slave上都須要設置.  
# 若是 「master-host」 沒有被設置,則默認爲1, 可是若是忽略此選項,MySQL不會做爲master生效.  
server-id = 1  
  
# 複製的Slave (去掉master段的註釋來使其生效)  
#  
# 爲了配置此主機做爲複製的slave服務器,你能夠選擇兩種方法:  
#  
# 1) 使用 CHANGE MASTER TO 命令 (在咱們的手冊中有完整描述) -  
# 語法以下:  
#  
# CHANGE MASTER TO MASTER_HOST=, MASTER_PORT=,  
# MASTER_USER=, MASTER_PASSWORD= ;  
#  
# 你須要替換掉 , , 等被尖括號包圍的字段以及使用master的端口號替換 (默認3306).  
#  
# 例子:  
#  
# CHANGE MASTER TO MASTER_HOST=’125.564.12.1′, MASTER_PORT=3306,  
# MASTER_USER=’joe’, MASTER_PASSWORD=’secret’;  
#  
# 或者  
#  
# 2) 設置如下的變量. 不論如何, 在你選擇這種方法的狀況下, 而後第一次啓動複製(甚至不成功的狀況下,  
# 例如若是你輸入錯密碼在master-password字段而且slave沒法鏈接),  
# slave會建立一個 master.info 文件,而且以後任何對於包含在此文件內的參數的變化都會被忽略  
# 而且由 master.info 文件內的內容覆蓋, 除非你關閉slave服務, 刪除 master.info 而且重啓slave 服務.  
# 因爲這個緣由,你也許不想碰一下的配置(註釋掉的) 而且使用 CHANGE MASTER TO (查看上面) 來代替  
#  
# 所須要的惟一id號位於 2 和 2^32 – 1之間  
# (而且和master不一樣)  
# 若是master-host被設置了.則默認值是2  
# 可是若是省略,則不會生效  
#server-id = 2  
#  
# 複製結構中的master – 必須  
#master-host =  
#  
# 當鏈接到master上時slave所用來認證的用戶名 – 必須  
#master-user =  
#  
# 當鏈接到master上時slave所用來認證的密碼 – 必須  
#master-password =  
#  
# master監聽的端口.  
# 可選 – 默認是3306  
#master-port =  
  
# 使得slave只讀.只有用戶擁有SUPER權限和在上面的slave線程可以修改數據.  
# 你可使用此項去保證沒有應用程序會意外的修改slave而不是master上的數據  
#read_only  
  
#*** MyISAM 相關選項  
  
# 關鍵詞緩衝的大小, 通常用來緩衝MyISAM表的索引塊.  
# 不要將其設置大於你可用內存的30%,  
# 由於一部份內存一樣被OS用來緩衝行數據  
# 甚至在你並不使用MyISAM 表的狀況下, 你也須要仍舊設置起 8-64M 內存因爲它一樣會被內部臨時磁盤表使用.  
key_buffer_size = 128M  
  
# 用來作MyISAM表全表掃描的緩衝大小.  
# 當全表掃描須要時,在對應線程中分配.  
read_buffer_size = 8M  
  
# 當在排序以後,從一個已經排序好的序列中讀取行時,行數據將從這個緩衝中讀取來防止磁盤尋道.  
# 若是你增高此值,能夠提升不少ORDER BY的性能.  
# 當須要時由每一個線程分配  
read_rnd_buffer_size = 64M  
  
# MyISAM 使用特殊的相似樹的cache來使得突發插入  
# (這些插入是,INSERT … SELECT, INSERT … VALUES (…), (…), …, 以及 LOAD DATA  
# INFILE) 更快. 此變量限制每一個進程中緩衝樹的字節數.  
# 設置爲 0 會關閉此優化.  
# 爲了最優化不要將此值設置大於 「key_buffer_size」.  
# 當突發插入被檢測到時此緩衝將被分配.  
bulk_insert_buffer_size = 256M  
  
# 此緩衝當MySQL須要在 REPAIR, OPTIMIZE, ALTER 以及 LOAD DATA INFILE 到一個空表中引發重建索引時被分配.  
# 這在每一個線程中被分配.因此在設置大值時須要當心.  
myisam_sort_buffer_size = 256M  
  
# MySQL重建索引時所容許的最大臨時文件的大小 (當 REPAIR, ALTER TABLE 或者 LOAD DATA INFILE).  
# 若是文件大小比此值更大,索引會經過鍵值緩衝建立(更慢)  
myisam_max_sort_file_size = 10G  
  
# 若是被用來更快的索引建立索引所使用臨時文件大於制定的值,那就使用鍵值緩衝方法.  
# 這主要用來強制在大表中長字串鍵去使用慢速的鍵值緩衝方法來建立索引.  
myisam_max_extra_sort_file_size = 10G  
  
# 若是一個表擁有超過一個索引, MyISAM 能夠經過並行排序使用超過一個線程去修復他們.  
# 這對於擁有多個CPU以及大量內存狀況的用戶,是一個很好的選擇.  
myisam_repair_threads = 1  
  
# 自動檢查和修復沒有適當關閉的 MyISAM 表.  
myisam_recover  
  
# 默認關閉 Federated  
skip-federated  
  
# *** BDB 相關選項 ***  
  
# 若是你運行的MySQL服務有BDB支持可是你不許備使用的時候使用此選項. 這會節省內存而且可能加速一些事.  
skip-bdb  
  
# *** INNODB 相關選項 ***  
  
# 若是你的MySQL服務包含InnoDB支持可是並不打算使用的話,  
# 使用此選項會節省內存以及磁盤空間,而且加速某些部分  
#skip-innodb  
  
# 附加的內存池被InnoDB用來保存 metadata 信息  
# 若是InnoDB爲此目的須要更多的內存,它會開始從OS這裏申請內存.  
# 因爲這個操做在大多數現代操做系統上已經足夠快, 你通常不須要修改此值.  
# SHOW INNODB STATUS 命令會顯示當先使用的數量.  
innodb_additional_mem_pool_size = 64M  
  
# InnoDB使用一個緩衝池來保存索引和原始數據, 不像 MyISAM.  
# 這裏你設置越大,你在存取表裏面數據時所須要的磁盤I/O越少.  
# 在一個獨立使用的數據庫服務器上,你能夠設置這個變量到服務器物理內存大小的80%  
# 不要設置過大,不然,因爲物理內存的競爭可能致使操做系統的換頁顛簸.  
# 注意在32位系統上你每一個進程可能被限制在 2-3.5G 用戶層面內存限制,  
# 因此不要設置的過高.  
innodb_buffer_pool_size = 6G  
  
# InnoDB 將數據保存在一個或者多個數據文件中成爲表空間.  
# 若是你只有單個邏輯驅動保存你的數據,一個單個的自增文件就足夠好了.  
# 其餘狀況下.每一個設備一個文件通常都是個好的選擇.  
# 你也能夠配置InnoDB來使用裸盤分區 – 請參考手冊來獲取更多相關內容  
innodb_data_file_path = ibdata1:10M:autoextend  
  
# 設置此選項若是你但願InnoDB表空間文件被保存在其餘分區.  
# 默認保存在MySQL的datadir中.  
#innodb_data_home_dir =  
  
# 用來同步IO操做的IO線程的數量. This value is  
# 此值在Unix下被硬編碼爲4,可是在Windows磁盤I/O可能在一個大數值下表現的更好.  
innodb_file_io_threads = 4  
  
# 若是你發現InnoDB表空間損壞, 設置此值爲一個非零值可能幫助你導出你的表.  
# 從1開始而且增長此值知道你可以成功的導出表.  
#innodb_force_recovery=1  
  
# 在InnoDb核心內的容許線程數量.  
# 最優值依賴於應用程序,硬件以及操做系統的調度方式.  
# 太高的值可能致使線程的互斥顛簸.  
innodb_thread_concurrency = 16  
  
# 若是設置爲1 ,InnoDB會在每次提交後刷新(fsync)事務日誌到磁盤上,  
# 這提供了完整的ACID行爲.  
# 若是你願意對事務安全折衷, 而且你正在運行一個小的食物, 你能夠設置此值到0或者2來減小由事務日誌引發的磁盤I/O  
# 0表明日誌只大約每秒寫入日誌文件而且日誌文件刷新到磁盤.  
# 2表明日誌寫入日誌文件在每次提交後,可是日誌文件只有大約每秒纔會刷新到磁盤上.  
innodb_flush_log_at_trx_commit = 2  
(說明:若是是遊戲服務器,建議此值設置爲2;若是是對數據安全要求極高的應用,建議設置爲1;設置爲0性能最高,但若是發生故障,數據可能會有丟失的危險!默認值1的意思是每一次事務提交或事務外的指令都須要把日誌寫入(flush)硬盤,這是很費時的。特別是使用電池供電緩存(Battery backed up cache)時。設成2對於不少運用,特別是從MyISAM錶轉過來的是能夠的,它的意思是不寫入硬盤而是寫入系統緩存。日誌仍然會每秒flush到硬盤,因此你通常不會丟失超過1-2秒的更新。設成0會更快一點,但安全方面比較差,即便MySQL掛了也可能會丟失事務的數據。而值2只會在整個操做系統掛了時纔可能丟數據。)  
  
# 加速InnoDB的關閉. 這會阻止InnoDB在關閉時作全清除以及插入緩衝合併.  
# 這可能極大增長關機時間, 可是取而代之的是InnoDB可能在下次啓動時作這些操做.  
#innodb_fast_shutdown  
  
# 用來緩衝日誌數據的緩衝區的大小.  
# 當此值快滿時, InnoDB將必須刷新數據到磁盤上.  
# 因爲基本上每秒都會刷新一次,因此沒有必要將此值設置的太大(甚至對於長事務而言)  
  
innodb_log_buffer_size = 16M  
  
# 在日誌組中每一個日誌文件的大小.  
# 你應該設置日誌文件總合大小到你緩衝池大小的25%~100%  
# 來避免在日誌文件覆寫上沒必要要的緩衝池刷新行爲.  
# 不論如何, 請注意一個大的日誌文件大小會增長恢復進程所須要的時間.  
innodb_log_file_size = 512M  
  
# 在日誌組中的文件總數.  
# 一般來講2~3是比較好的.  
innodb_log_files_in_group = 3  
  
# InnoDB的日誌文件所在位置. 默認是MySQL的datadir.  
# 你能夠將其指定到一個獨立的硬盤上或者一個RAID1捲上來提升其性能  
#innodb_log_group_home_dir  
  
# 在InnoDB緩衝池中最大容許的髒頁面的比例.  
# 若是達到限額, InnoDB會開始刷新他們防止他們妨礙到乾淨數據頁面.  
# 這是一個軟限制,不被保證絕對執行.  
innodb_max_dirty_pages_pct = 90  
  
# InnoDB用來刷新日誌的方法.  
# 表空間老是使用雙重寫入刷新方法  
# 默認值是 「fdatasync」, 另外一個是 「O_DSYNC」.  
#innodb_flush_method=O_DSYNC  
  
# 在被回滾前,一個InnoDB的事務應該等待一個鎖被批准多久.  
# InnoDB在其擁有的鎖表中自動檢測事務死鎖而且回滾事務.  
# 若是你使用 LOCK TABLES 指令, 或者在一樣事務中使用除了InnoDB之外的其餘事務安全的存儲引擎  
# 那麼一個死鎖可能發生而InnoDB沒法注意到.  
# 這種狀況下這個timeout值對於解決這種問題就很是有幫助.  
innodb_lock_wait_timeout = 120  
  
[mysqldump]  
# 不要在將內存中的整個結果寫入磁盤以前緩存. 在導出很是巨大的表時須要此項  
quick  
  
max_allowed_packet = 32M  
  
[mysql]  
no-auto-rehash  
  
# 僅僅容許使用鍵值的 UPDATEs 和 DELETEs .  
#safe-updates  
  
[isamchk]  
key_buffer = 2048M  
sort_buffer_size = 2048M  
read_buffer = 32M  
write_buffer = 32M  
  
[myisamchk]  
key_buffer = 2048M  
sort_buffer_size = 2048M  
read_buffer = 32M  
write_buffer = 32M  
  
[mysqlhotcopy]  
interactive-timeout  
  
[mysqld_safe]  
# 增長每一個進程的可打開文件數量.  
# 警告: 確認你已經將全系統限制設定的足夠高!  
# 打開大量表須要將此值設大  
open-files-limit = 8192
相關文章
相關標籤/搜索