Linux
PostgreSQL 無法啟動,因為它“無法分配記憶體”
我在 Ubuntu 10.04 上執行 PostgreSQL 8.4.5。我執行一個 EC2 實例,其中有幾個在 nginx 上執行的站點。這些站點中的大多數都在 Django 上執行並連接到這個 Postgres 實例。
出於某種原因,今晚 8 點 45 分,Postgres 宕機了。我登錄到機器,我看到了這個錯誤資訊:
* Starting PostgreSQL 8.4 database server * The PostgreSQL server failed to start. Please check the log output: 2011-04-17 04:46:49 UTC FATAL: could not create shared memory segment: Cannot allocate memory 2011-04-17 04:46:49 UTC DETAIL: Failed system call was shmget(key=5432001, size=16211968, 03600). 2011-04-17 04:46:49 UTC HINT: This error usually means that PostgreSQL's request for a shared memory segment exceeded available memory or swap space. To reduce the request size (currently 16211968 bytes), reduce PostgreSQL's shared_buffers parameter (currently 1792) and/or its max_connections parameter (currently 53). The PostgreSQL documentation contains more information about shared memory configuration. ...fail!
我做的第一件事是更改 Linux 共享記憶體分配。
sysctl -w kernel.shmmax=367108864> sysctl -p /etc/sysctl.conf
那沒有做到。然後我編輯
/etc/postgresql/8.4/main/postgresql.conf
並降低了max_connections
價值。這工作……大約10分鐘。現在我得到了同樣的錯誤,不管有多低
max_connections
。我需要將其設置為至少 9(因為這是需要訪問此 Postgres 伺服器的 Django 項目的數量)。關於我如何解決這個問題的任何想法?
您可以使用“ipcs”命令列出所有 SHM 段。如果一個程序在沒有刪除它們的情況下崩潰,它們可能正在消耗記憶體;您可以使用“ipcrm”命令手動刪除這些。
一些Google搜尋表明您應該減少 postgres shared_buffers和max_connections 數量。你對 shared_buffers 做過什麼了嗎?
您是否查看過postgresql 共享記憶體文件?那裡有很多關於如何在 linux 機器上調整共享記憶體參數的細節。