2014-03-05 32 views
1

我們有一個web應用程序(機架表),這給我們的生產箱上的悲傷。每當用戶嘗試運行搜索時,它會給出以下錯誤:內存不足錯誤從mysql

Pdo exception: PDOException 

SQLSTATE[HY000]: General error: 5 Out of memory (Needed 2057328 bytes) (HY000) 

我無法在我們的備份服務器上重新創建問題。除了生產中我們擁有16GB內存以及備份8GB的事實之外,這些服務器是相匹配的。這是一個有爭議的問題,因爲兩者都運行32位操作系統,所以只能使用4GB的RAM。我們還成立了一個交換分區...

這裏就是我在生產中得到了「免費-m」命令回:

prod:/etc# free -m 
      total   used   free  shared  buffers 
Mem:   3294   1958   1335   0   118 
-/+ buffers:    1839   1454 
Swap:   3817   109   3707 
prod:/etc# 

我檢查,以確保上的my.cnf兩個盒子都匹配。生產的數據庫被複制到備份服務器上...所以數據也匹配。

我想我們的選擇是:

A) convert the o/s to 64 bit so we can use more RAM. 
B) start tweaking some of the innodb settings in my.cnf. 

但在此之前我嘗試A或B,我想知道是否有什麼我需要兩個服務器之間的比較......看到備份如何工作得很好。在我們沒有考慮到的地方肯定有區別。

任何建議,將不勝感激。

+0

請參閱http://mysql.rjweb.org/doc.php/memory – eggyal

回答

1

我創建了一個腳本來模擬備份服務器上的負載,然後能夠重新創建內存不足錯誤消息。 最後,我在my.cnf中添加了「join_buffer_size」設置並將其設置爲3 MB。這已經解決了這個問題。

ps。我下載並運行了tuning-primer.sh以及mysqltuner.pl以縮小問題範圍。

+0

[tuning-primer.sh](https://launchpad.net/mysql-tuning-primer/+download)和[mysqltuner.pl ](https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl)很有用,謝謝! – ostrokach