如何設置LINUX的共享內存

 

安裝postgresDB時,出現如下錯誤:

[postgres@localhost ~]$ /usr/local/pgsql/bin/postmaster -D /usr/local/pgsql/data
FATAL:  could not create shared memory segment: 無效的參數
DETAIL:  Failed system call was shmget(key=5432001, size=38076416, 03600).
HINT:  This error usually means that PostgreSQL's request for a shared memory segment exceeded your kernel's SHMMAX parameter.  You can either reduce the request size or reconfigure the kernel with larger SHMMAX.  To reduce the request size (currently 38076416 bytes), reduce PostgreSQL's shared_buffers parameter (currently 4096) and/or its max_connections parameter (currently 100).
        If the request size is already small, it's possible that it is less than your kernel's SHMMIN parameter, in which case raising the request size or reconfiguring SHMMIN is called for.
        The PostgreSQL documentation contains more information about  shared memory configuration.

解決方法:

 

我們可以修改shmmax內核參數,使SGA存在於一個共享內存段中。

  通過修改/proc/sys/kernel/shmmax參數可以達到此目的。

[root@neirongroot]# echo 1073741824 > /proc/sys/kernel/shmmax

[root@neirongroot]# more /proc/sys/kernel/shmmax

1073741824這裏設爲1G

  對於shmmax文件的修改,系統重新啓動後會復位。可以通過修改/etc/sysctl.conf使更改永久化。

  在該文件內添加以下一行    kernel.shmmax = 1073741824 這個更改在系統重新啓動後生效.

1、設置 SHMMAX

SHMMAX

  參數定義共享內存段的最大尺寸(以字節爲單位)。在設置 SHMMAX時,切記 SGA的大小應該適合於一個共享內存段。 SHMMAX設置不足可能會導致以下問題:

ORA-27123:unableto attach to shared memory segment

  您可以通過執行以下命令來確定 SHMMAX的值:

# cat/proc/sys/kernel/shmmax

33554432

SHMMAX 的默認值是 32MB。我一般使用下列方法之一種將 SHMMAX參數設爲 2GB

  通過直接更改 /proc文件系統,你不需重新啓動機器就可以改變 SHMMAX的默認設置。我使用的方法是將以下命令放入 /etc/rc.local啓動文件中:

#>echo "2147483648" > /proc/sys/kernel/shmmax

  您還可以使用 sysctl命令來更改 SHMMAX的值:

# sysctl-w kernel.shmmax=2147483648

  最後,通過將該內核參數插入到 /etc/sysctl.conf啓動文件中,您可以使這種更改永久有效:

# echo"kernel.shmmax=2147483648" >> /etc/sysctl.conf

2、設置 SHMMNI

  我們現在來看 SHMMNI參數。這個內核參數用於設置系統範圍內共享內存段的最大數量。該參數的默認值是 4096。這一數值已經足夠,通常不需要更改。

  您可以通過執行以下命令來確定 SHMMNI的值:

# cat/proc/sys/kernel/shmmni

4096

3、設置 SHMALL

  最後,我們來看 SHMALL共享內存內核參數。該參數控制着系統一次可以使用的共享內存總量(以頁爲單位)。簡言之,該參數的值始終應該至少爲:

ceil(SHMMAX/PAGE_SIZE)

SHMALL 的默認大小爲 2097152,可以使用以下命令進行查詢:

# cat/proc/sys/kernel/shmall

2097152

SHMALL 的默認設置對於我們的 Oracle9 i RAC安裝來說應該足夠使用。

  注意: i386平臺上 Red Hat Linux頁面大小 4096字節。但是,您可以使用 bigpages,它支持配置更大的內存頁面尺寸。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章