Oracle系統內核參數、資源限制及ipcs相關命令總結

1、oracle內核參數

Oracle內核參數配置文件在 /etc/sysctl.conf路徑下:linux

vi /etc/sysctl.conf
# System default settings live in /usr/lib/sysctl.d/00-system.conf.
# To override those settings, enter new settings here, or in an /etc/sysctl.d/<name>.conf file
#
# For more information, see sysctl.conf(5) and sysctl.d(5).

#ORACLE SETTING
kernel.shmmax = 64424509440
kernel.shmmni = 4096
kernel.shmall = 15728640
kernel.sem = 5010 641280 5010 128
net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
fs.aio-max-nr = 1048576
fs.file-max = 6815744

一、kernel.shmall: 共享內存頁數的最大值,指系統一次可使用的共享內存段的最大數量,以頁爲單位
Linux共享內存頁大小爲4KB(RedHat linux系統中頁大小爲4096即4K,實際環境以getconf PAGE_SIZE結果爲準), 共享內存段的大小都是共享內存頁大小的整數倍。一個共享內存段的最大能夠設置16G,對應須要共享內存頁數爲16GB/4KB=16777216KB/4KB=4194304(頁)
該參數數值根據系統內存大小對應設置優化nginx

ORACLE默認是2097152            
  1G*1024*1024/4=262144
  kernel.shmall = 1G/4k=1048576k/4k=262144    ---內存1G
  kernel.shmall = 2G/4k=2097152k/4k=524288    ---內存2G
  kernel.shmall = 4G/4k=4194304k/4k=1048576    ---內存4G
  kernel.shmall = 8G/4k=8388608k/4k=2097152    ---內存8G
  kernel.shmall = 16G/4k=16777216k/4k=4194304    ---內存16G
  kernel.shmall = 32G/4k=33554432k/4k=8388608    ---內存32G
  kernel.shmall = 64G/4k=67108864k/4k=16777216   ---內存64G

二、kernel.shmmax:單個共享內存段的最大值,單位爲字節
shmmax是核心參數中最重要的參數之一,用於定義單個共享內存段的最大值,shmmax設置應足夠大,並且要大於Oracle中sga-max-size的值,不然會形成oracle性能降低,通常32bit操做系統,直接設置爲系統支持的最大內存便可,64bit操做系統設置大於sga-max-size的值便可 ,通常狀況下能夠設置最大共享內存爲物理內存的一半,如物理內存是 1G,則能夠設置最大共享內存爲 512 1024 1024 = 536870912;以此類推,在redhat上最大共享內存不建議超過410241024*1024-1=4294967295。web

32位的操做系統4G最大值 4294967295  
 64位操做系統1G*1024*1024*1024-1即一個G{(1G*1073741824)-1}
kernel.shmmax = 2147483647    ---內存2G
kernel.shmmax = 4294967295    ---內存4G
kernel.shmmax = 8589934592    ---內存8G
kernel.shmmax = 12884901887    ---內存12G
kernel.shmmax = 17179869184    ---內存16G
kernel.shmmax = 34359738368    ---內存32G
kernel.shmmax = 68719476736    ---內存64G

三、kernel.shmmni:共享內存段的最小數量
oracle設置默認值爲4096,通常是足夠用了,不須要調整數據庫

四、kernel.sem:對應4個值
SEMMSL、SEMMNS、SEMOPM、SEMMNI編程

(1)SEMMSL: 每一個信號集的最大信號數量
當oracle DB初始化參數文件中PROCESSES參數設置較大時,須要調整SEMAPHORES設置SEMMSL應該設置爲服務器中各個實例中最大的PROCESSES參數+10,例如,當最大的PROCESSES參數爲5000時,SEMMSL應設置爲5010。 Oracle 建議將 SEMMSL 的值設置爲很多於 100 。
查看oracle 的最大鏈接數命令:windows

select * from v$license;

(2)SEMMNS:用於控制整個 Linux 系統中信號(而不是信號集)的最大數。
Oracle 建議將 SEMMNS 設置爲:系統中每一個數據庫的 PROCESSES 實例參數設置值的總和,加上最大 PROCESSES 值的兩倍,最後根據系統中 Oracle 數據庫的數量,每一個加 10 。
SEMMNS參數應設置爲SEMMSLSEMMNI,接上例SEMMSL爲5010,SEMMNS參數應爲(5010128)=641280數組

(3)SEMOPM: 內核參數用於控制每一個 semop 系統調用能夠執行的信號操做的數量。semop 系統調用(函數)提供了利用一個 semop 系統調用完成多項信號操做的功能。一個信號集可以擁有每一個信號集中最大數量的SEMMSL 信號,所以建議設置 SEMOPM 等於SEMMSL ,Oracle 建議將 SEMOPM 的值設置爲很多於 100 。緩存

(4)SEMMNI :內核參數用於控制整個 Linux 系統中信號集的最大數量。
Oracle 建議將 SEMMNI 的值設置爲很多於 100 。服務器

以默認的配置kernel.sem = 250 32000 100 128爲例:
250是參數semmsl的值,表示一個信號量集合中可以包含的信號量最大數目。
32000是參數semmns的值,表示系統內可容許的信號量最大數目。
100是參數semopm的值,表示單個semopm()調用在一個信號量集合上能夠執行的操做數量。
128是參數semmni的值,表示系統信號量集合總數。
kernel.sem = 510 65280 510 128      --PROCESSES參數爲500
kernel.sem = 1010 129280 1010 128    --PROCESSES參數爲1000
kernel.sem = 3010 385280 3010 128     --PROCESSES參數爲3000
4個值從左到右分別爲semmsl、semmns、semopm和semmni
例:在oracle  ora.init文件參數中設置PROCESSES參數爲5000
則semmsl=5010,semmni=128,semmns=semmsl* semmni=641280
另外semopm建議設置等於semmsl值即5010
那麼kernel.sem=5010 641280 5010 128
alter system set processes=1000 scope=spfile;  
alter system set sessions=1522 scope=spfile;

注意版本不一樣設置的區別:
oracle11gR2以前的版本:sessions=processes1.1+5
oracle11gR2以後的版本:sessions=processes1.5+22cookie

五、fs.aio-max-nr = 1048576
指系統容許的最大的異步IO請求大小oracle默認設置爲1M即1048576,通常不用更改
六、fs.file-max = 6815744
fs.file-max指系統可以打開最大的文件句柄數
建議設置:fs.file-max=512processes=6.51024*1024=6.5M

2、其餘內核參數

(1)內核TCP相關的參數均在/proc/sys/net/ipv4下,有如下選項

tcp_abort_on_overflow
tcp_adv_win_scale
tcp_allowed_congestion_control
tcp_app_win
tcp_autocorking
tcp_available_congestion_control
tcp_base_mss
tcp_challenge_ack_limit
tcp_congestion_control
tcp_dsack
tcp_early_retrans
tcp_ecn
tcp_fack
tcp_fastopen
tcp_fastopen_key
tcp_fin_timeout
tcp_frto
tcp_invalid_ratelimit
tcp_keepalive_intvl
tcp_keepalive_probes
tcp_keepalive_time
tcp_limit_output_bytes
tcp_low_latency
tcp_max_orphans
tcp_max_ssthresh
tcp_max_syn_backlog
tcp_max_tw_buckets
tcp_mem
tcp_min_tso_segs
tcp_moderate_rcvbuf
tcp_mtu_probing
tcp_no_metrics_save
tcp_notsent_lowat
tcp_orphan_retries
tcp_reordering
tcp_retrans_collapse
tcp_retries1
tcp_retries2
tcp_rfc1337
tcp_rmem
tcp_sack
tcp_slow_start_after_idle
tcp_stdurg
tcp_synack_retries
tcp_syncookies
tcp_syn_retries
tcp_thin_dupack
tcp_thin_linear_timeouts
tcp_timestamps
tcp_tso_win_divisor
tcp_tw_recycle
tcp_tw_reuse
tcp_window_scaling
tcp_wmem
tcp_workaround_signed_windows

(2)ARP相關的內核參數,ARP緩存限制解釋:

net.ipv4.neigh.default.gc_thresh1  在該值如下不gc,常駐緩存
net.ipv4.neigh.default.gc_thresh2  soft limit,能夠臨時超過該值,但只能保留5秒,以後會被gc掉
net.ipv4.neigh.default.gc_thresh3  hard limit,超過該值,就當即gc掉

(3)TCP相關的鏈接數:

tcp_max_syn_backlog: 半鏈接隊列,是指定所能接受SYN同步包的最大客戶端數量,即半鏈接上限;
somaxconn: 全鏈接隊列,指服務端所能accept即處理數據的最大客戶端數量,即完成鏈接上限。
tcp_max_syn_backlog:默認值爲256
somaxconn:默認值爲128,對應socket編程中的backlog,min{somaxconn,backlog}爲實際值; 可使用 ss -lnt中Recv-Q查看對列是否滿

(4)關於net相關的參數

net.ipv4.ip_local_port_range = 9000 65500
net.core.rmem_default = 262144
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 1048586
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_syncookies = 1
net.core.somaxconn = 262144
net.core.netdev_max_backlog = 262144
net.ipv4.tcp_max_orphans = 262144
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
net.ipv4.tcp_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 30

對應參數的功能註釋:
net.ipv4.ip_local_port_range 表示應用程序可以使用的IPv4端口範圍。oracle10g前建議端口範圍爲1024 65000,oracle11g建議端口範圍爲:9000 65500

net.core.rmem_default 表示套接字接收緩衝區大小的缺省值oracle建議設置爲265K即262144

net.core.rmem_max 表示套接字接收緩衝區大小的最大值oracle10g及之前版本建議設置爲256k即262144 oracle11g建議設置爲4M 即4194304

net.core.wmem_default 表示套接字發送緩衝區大小的缺省值oracle建議設置爲265K即262144

net.core.wmem_max 表示套接字發送緩衝區大小的最大值oracle10g及之前版本建議設置爲256k即262144 oracle11g建議設置爲1M即1048576

net.ipv4.tcp_tw_reuse 開啓重用。容許將TIME-WAIT sockets 從新用於新的TCP 鏈接

net.ipv4.tcp_tw_recycle 啓用timewait 快速回收

net.ipv4.tcp_syncookies 開啓SYN Cookies,當出現SYN等待隊列溢出時,啓用cookies來處理

net.core.somaxconn 在web 應用中listen函數的backlog默認會給咱們內核參數的net.core.somaxconn限制到128,而nginx定義的NGXLISTENBACKLOG默認爲511,因此有必要調整這個值

net.core.netdev_max_backlog 每一個網絡接口接收數據包的速率比內核處理這些包的速率快時,容許送到隊列的數據包的最大數目

net.ipv4.tcp_max_orphans 系統中最多有多少個TCP套接字不被關聯到任何一個用戶文件句柄上。若是超過這個數字,故而鏈接將即刻被複位並打印出警告信息。這個限制僅僅是爲了防止簡單的DoS***,不能過度依靠它或者人爲地減少這個值,更應該增長這個值(若是增長了內存以後)

net.ipv4.tcp_max_syn_backlog 記錄的那些還沒有收到客戶端確認信息的鏈接請求的最大值。對於有128M內存的系統而言,缺省值是1024,小內存的系統則是128

net.ipv4.tcp_timestamps 時間戳能夠避免序列號的卷繞。一個1Gbps的鏈路確定會遇到之前用過的序列號。時間戳可以讓內核接受這種「異常」的數據包。這裏須要將其關掉

net.ipv4.tcp_synack_retries 爲了打開對端的鏈接,內核須要發送一個SYN 並附帶一個迴應前面一個SYN的ACK。也就是所謂三次握手中的第二次握手。這個設置決定了內核放棄鏈接以前發送SYN+ACK包的數量

net.ipv4.tcp_syn_retries 在內核放棄創建鏈接以前發送SYN 包的數量

net.ipv4.tcp_fin_timeout 若是套接字由本端要求關閉,這個參數決定了它保持在FIN-WAIT-2狀態的時間。對端能夠出錯並永遠不關閉鏈接,甚至意外宕機。缺省值是60秒。2.2內核的一般值是180秒,3你能夠按這個設置,但要記住的是,即便你的機器是一個輕載的WEB服務器,也有由於大量的死套接字而內存溢出的風險,FIN-WAIT-2的危險性比FIN-WAIT-1要小,由於它最多隻能吃掉1.5K內存,可是它們的生存期長些

net.ipv4.tcp_keepalive_time 當keepalive 啓用的時候,TCP發送keepalive消息的頻度。缺省是2小時

配置完這些以後使用以下命令從新加載生效

sysctl -p

3、關於資源限制

vi /etc/security/limits.conf
oracle soft nproc 2048
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536

一、「soft」 和 「hard」 的區別

soft  xxx  : 表明警告的設定,能夠超過這個設定值,可是超事後會有警告。

hard  xxx  : 表明嚴格的設定,不容許超過這個設定的值。

例如:soft 設爲2048,hard設爲16384 ,則當使用數在1~2048之間時能夠隨便使用,當使用數在2048~16384時則會出現警告信息,若是大於16384時,就會報錯。

二、「nproc」 和 "nofile"的區別

nproc  : 是操做系統級別對每一個用戶建立的進程數的限制

nofile : 是每一個進程能夠打開的文件數的限制

三、修改系統的配置
打開/etc/security/limits.conf (部分的系統是在/etc/security/limits.d/90-nproc.conf)

設置限制數量,第一列表示用戶,* 表示全部用戶

soft nproc :單個用戶可用的最大進程數量(超過會警告);
hard nproc:單個用戶可用的最大進程數量(超過會報錯);
soft nofile  :可打開的文件描述符的最大數(超過會警告);
hard nofile :可打開的文件描述符的最大數(超過會報錯);

四、備註

1)通常soft的值會比hard小,也可相等。
2)/etc/security/limits.d/裏面配置會覆蓋/etc/security/limits.conf的配置
3)只有root用戶纔有權限修改/etc/security/limits.conf
4)若是limits.conf沒有作設定,則默認值是1024

4、關於ipcs命令查看共享內存、消息隊列、信號量使用狀況

(1)ipcs -l命令能夠查看各個資源的系統限制信息,能夠看到系統容許的最大信號量集及信號量個數限制、最大的消息隊列中消息個數等信息

[oracle@localhost ~]$ ipcs -l

------ Messages Limits --------
max queues system wide = 7578
max size of message (bytes) = 8192
default max size of queue (bytes) = 16384

------ Shared Memory Limits --------
max number of segments = 4096
max seg size (kbytes) = 524288
max total shared memory (kbytes) = 18014398442373116
min seg size (bytes) = 1

------ Semaphore Limits --------             信號量限制
max number of arrays = 128                   最大數組數量
max semaphores per array = 250               每一個數組的最大信號量數目
max semaphores system wide = 32000           系統最大信號量數
max ops per semop call = 100                 每次信號量調用最大操做數
semaphore max value = 32767                  信號量最大值

(2)ipcs -u命令能夠查看各個資源的使用總結信息,其中能夠看到使用的信號量集的個數、信號量的個數,以及消息隊列中當前使用的消息個數總數、佔用的空間字節數

[oracle@localhost ~]$ ipcs -u

------ Messages Status --------
allocated queues = 0
used headers = 0
used space = 0 bytes

------ Shared Memory Status --------
segments allocated 5
pages allocated 40
pages resident  40
pages swapped   0
Swap performance: 0 attempts     0 successes

------ Semaphore Status --------  信號量狀態
used arrays = 2                           已使用數組
allocated semaphores = 168       已分配信號量數

(3)ipcs -p命令能夠獲得與共享內存、消息隊列相關進程之間的消息

[oracle@localhost ~]$ ipcs -p

------ Message Queues PIDs --------
msqid      owner      lspid      lrpid     

------ Shared Memory Creator/Last-op PIDs --------
shmid      owner      cpid       lpid      
32768      root       12624      6914

(4)ipcs -a 查看當前使用的共享內存、消息隊列及信號量全部信息

[oracle@localhost ~]$ ipcs -a

------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages    

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      
0x6c001f61 32768      root       600        292944     6                       

------ Semaphore Arrays --------
key        semid      owner      perms      nsems     
0x7a001f61 163840     oracle     600        12        
0x00000000 196609     nobody     600        1         
0x00000000 262146     nobody     600        1         
0x00000000 294915     nobody     600        1         
0x00000000 327684     nobody     600        1         
0x00000000 491525     nobody     600        1

(5)ipcs的其餘參數

ipcs -m  查看系統共享內存信息
ipcs -q  查看系統消息隊列信息
ipcs -s  查看系統信號量信息
ipcs -t  查看最新調用IPC資源的詳細時間
ipcs -c  查看IPC的建立者和全部者
額外格式控制:
ipcs -l --human 以人類能夠閱讀的方式顯示size
相關文章
相關標籤/搜索