Linux

PostgreSQL 無法啟動,因為它“無法分配記憶體”

  • April 26, 2011

我在 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_buffersmax_connections 數量。你對 shared_buffers 做過什麼了嗎?

您是否查看過postgresql 共享記憶體文件?那裡有很多關於如何在 linux 機器上調整共享記憶體參數的細節。

引用自:https://serverfault.com/questions/260573