SQLSTATEH是000H是000HY000: 一般錯誤: 2006 MySQL server has gone away
伺服器詳情:
RAM: 16GB HDD: 1000GB OS: Linux 2.6.32-220.7.1.el6.x86_64 Processor: 6 Core
請參閱下面的連結以獲取我的 # 頂部預覽:
我經常可以在我的 plesk 面板中看到標題中提到的錯誤,我的 /etc/my.cnf 配置如下:
bind-address=127.0.0.1 local-infile=0 datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql max_connections=20000 max_user_connections=20000 key_buffer_size=512M join_buffer_size=4M read_buffer_size=4M read_rnd_buffer_size=512M sort_buffer_size=8M wait_timeout=300 interactive_timeout=300 connect_timeout=300 tmp_table_size=8M thread_concurrency=12 concurrent_insert=2 query_cache_limit=64M query_cache_size=128M query_cache_type=2 transaction_alloc_block_size=8192 max_allowed_packet=512M [mysqldump] quick max_allowed_packet=512M [myisamchk] key_buffer_size=128M sort_buffer_size=128M read_buffer_size=32M write_buffer_size=32M [mysqlhotcopy] interactive-timeout [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid open_files_limit=8192
由於我的伺服器 httpd conf 設置為
/etc/httpd/conf.d/swtune.conf
並且配置如下:在 prefork.c:<IfModule prefork.c> StartServers 8 MinSpareServers 10 MaxSpareServers 20 ServerLimit 1536 MaxClients 1536 MaxRequestsPerChild 4000 </IfModule>
如果我跑步,
grep -i maxclient /var/log/httpd/error_log
那麼我每天都會看到這個錯誤:[root@u16170254 ~]# grep -i maxclient /var/log/httpd/error_log [Sun Apr 15 07:26:03 2012] [error] server reached MaxClients setting, consider raising the MaxClients setting [Mon Apr 16 06:09:22 2012] [error] server reached MaxClients setting, consider raising the MaxClients setting
我試圖解釋我為保持伺服器正常所做的所有更改,但我的伺服器停機的最長時間。請幫助我更改哪個參數以保持伺服器正常並且我的網站可以快速載入。載入我的網站需要太多時間。
哇。
設置
MaxClients
為 1536 並且每個 Apache 子程序使用大約 69MB 的 RAM,您需要超過 100GB 的 RAM 來避免換出 Apache 記憶體的“熱”部分。我是否可以建議您降低該值,直到它適合您的可用 RAM?像這樣交換會使你的伺服器非常慢。由於您在同一台伺服器上執行 MySQL,我會為每個服務使用大約一半的可用 RAM,因此
MaxClients 115
適合您。如果你想在 MySQL 周圍留一點喘息的空間,可能會低一點。現在,轉到 MySQL,這可能是您的伺服器執行緩慢的實際原因。MySQL 使用大量 CPU 和非常少的 RAM。要做的三件事:
- 打開 mysql 慢查詢日誌並將其設置為
long_query_time
10 或 20 秒之類的高值。慢慢降低該設置,直到您開始擷取慢查詢。一旦您知道哪些查詢導致了問題,請通過添加適當的索引或修改查詢來調整它們。調整查詢是一個主要話題,有幾本很好的書。- 執行 mysqltuner.pl 並遵循它的建議。(
wget mysqltuner.pl
)- 安裝伺服器性能監控工具,如 Cacti、Munin 或 Zabbix(還有其他選項)並添加“Better Cacti Templates”或“Appaloosa Templates”。
採用上面的“每個服務一半”的想法,
mysqltuner.pl
將告訴您 MySQL 可以使用的最大 RAM 量,但您不太可能看到這一點,因為它依賴於每個連接的 RAM 分配,您永遠不會看到所有 20,000 個連接允許。相反,觀察 MySQL 實際使用的內容並使其使用大約 2/3 至 3/4 的剩餘 RAM 是一個明智的值。您可能應該根據您使用的引擎 降低和
query_cache
提高query_cache_limit
其中一個key_buffer_size
或提高。會有比我更好的建議。innodb_buffer_pool``mysqltuner.pl
您用作此問題標題的錯誤消息與
wait_timeout
MySQL 的設置有關。某些程序已打開與 MySQL 的連接,然後在命令之間等待至少 300 秒。如果這是一個 Web 請求,則提高此值不是正確的解決方案。300 秒遠遠超過人們等待網路請求完成的時間。修復導致平均負載如此之高的任何問題(可能是其他慢速查詢和交換),請求會更快。