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
(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
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
(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