shmmax 定義系統允許的單一共享記憶體段最大值(位元組)。
echo 1000 > /proc/sys/kernel/shmmax # 僅 1KB,極小值(重啟失效)
ORA-12547: TNS: lost contactProcess J000 died, see its trace file、kkjcre1p: unable to spawn jobq slave processProcess J000 is dead (pid=... state=KSOSP_SPAWNED)ipcs -a
# 發現多個 393216 bytes (384KB) 的共享記憶體段,狀態 dest
# SGA 資訊顯示 Maximum SGA Size 422670336 (~403MB)
當 shmmax < SGA 時,Oracle 嘗試用多個共享記憶體段組合 SGA,但若 shmmax 過小導致段數過多,OS 資源耗盡,背景進程(如 J000)無法啟動。
shmmax 設定大於 SGA 總大小,使 SGA 置於單一共享記憶體段,避免分段開銷與資源耗盡。/etc/sysctl.conf,如 kernel.shmmax = 68719476736 (64GB),再執行 sysctl -p。UNIX 預設核心資源常不足以支撐中大型 Oracle 實例。SHMMAX(最大共享記憶體段)與SEMMNS(最大訊號量)可能低於建議值。Windows 採執行緒模型,IPC 資源較少且不可調整。