关键词:
一、oracle内核参数
Oracle内核参数配置文件在 /etc/sysctl.conf路径下:
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
1、kernel.shmall: 共享内存页数的最大值,指系统一次可以使用的共享内存段的最大数量,以页为单位
Linux共享内存页大小为4KB(RedHat linux系统中页大小为4096即4K,实际环境以getconf PAGE_SIZE结果为准), 共享内存段的大小都是共享内存页大小的整数倍。一个共享内存段的最大可以设置16G,对应需要共享内存页数为16GB/4KB=16777216KB/4KB=4194304(页)
该参数数值根据系统内存大小对应设置优化
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
2、kernel.shmmax:单个共享内存段的最大值,单位为字节
shmmax是核心参数中最重要的参数之一,用于定义单个共享内存段的最大值,shmmax设置应足够大,而且要大于Oracle中sga-max-size的值,否则会造成oracle性能下降,一般32bit操作系统,直接设置为系统支持的最大内存即可,64bit操作系统设置大于sga-max-size的值即可 ,一般情况下可以设置最大共享内存为物理内存的一半,如物理内存是 1G,则可以设置最大共享内存为 512 1024 1024 = 536870912;以此类推,在redhat上最大共享内存不建议超过410241024*1024-1=4294967295。
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
3、kernel.shmmni:共享内存段的最小数量
oracle设置默认值为4096,一般是足够用了,不需要调整
4、kernel.sem:对应4个值
SEMMSL、SEMMNS、SEMOPM、SEMMNI
(1)SEMMSL: 每个信号集的最大信号数量
当oracle DB初始化参数文件中PROCESSES参数设置较大时,需要调整SEMAPHORES设置SEMMSL应该设置为服务器中各个实例中最大的PROCESSES参数+10,例如,当最大的PROCESSES参数为5000时,SEMMSL应设置为5010。 Oracle 建议将 SEMMSL 的值设置为不少于 100 。
查看oracle 的最大连接数命令:
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+22
5、fs.aio-max-nr = 1048576
指系统允许的最大的异步IO请求大小oracle默认设置为1M即1048576,一般不用更改
6、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,minsomaxconn,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
1、“soft” 和 “hard” 的区别
soft xxx : 代表警告的设定,可以超过这个设定值,但是超过后会有警告。
hard xxx : 代表严格的设定,不允许超过这个设定的值。
例如:soft 设为2048,hard设为16384 ,则当使用数在1~2048之间时可以随便使用,当使用数在2048~16384时则会出现警告信息,如果大于16384时,就会报错。
2、“nproc” 和 "nofile"的区别
nproc : 是操作系统级别对每个用户创建的进程数的限制
nofile : 是每个进程可以打开的文件数的限制
3、修改系统的配置
打开/etc/security/limits.conf (部分的系统是在/etc/security/limits.d/90-nproc.conf)
设置限制数量,第一列表示用户,* 表示所有用户
soft nproc :单个用户可用的最大进程数量(超过会警告);
hard nproc:单个用户可用的最大进程数量(超过会报错);
soft nofile :可打开的文件描述符的最大数(超过会警告);
hard nofile :可打开的文件描述符的最大数(超过会报错);
4、备注
1)一般soft的值会比hard小,也可相等。
2)/etc/security/limits.d/里面配置会覆盖/etc/security/limits.conf的配置
3)只有root用户才有权限修改/etc/security/limits.conf
4)如果limits.conf没有做设定,则默认值是1024
四、关于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
docker系列09—docker的系统资源限制及验证
...一条警告,如下所示:WARNING:Noswaplimitsupport,请参阅操作系统的文档以启用它们,了解更多。[[email protected]~]#dockerinfoContainers:0Running:0Paused:0Stopped:0Images:43ServerVersion:17.03.2-ceStorageDriver:overlayBackingFilesystem:xfsSupportsd_type:trueLoggingDri... 查看详情
docker的系统资源限制及验证(代码片段)
...一条警告,如下所示:WARNING:Noswaplimitsupport,请参阅操作系统的文档以启用它们,了解更多。一、内存1、内存不足的风险 重要的是不要让正在运行的容器占用太多的主机内存。在Linux主机上,如果内核检测到没有足... 查看详情
docker容器相关技术
...限制优先级设定资源计量资源控制Docker容器的能力(1)文件系统隔离:每个容器都有自己的root文件系统(2)进程隔离:每个容器都运行在自己的进程环境中(3)网络隔离:容器间的虚拟网络接口和IP地址都是分开的(4)资源隔离和分组:... 查看详情
linux系统初装资源限制和内核参数优化脚本(centos和ubuntu通用)(代码片段)
#!/bin/bash###***********************************************************************##Author:sunmy##MAil:8528379@sina.com##Date:2021-8-8##FileName:setOp_CU_v1.sh##URL:https://www.sunmy.pro 查看详情
socket与系统调用深度分析(代码片段)
...写基于不同网络协议的应用程序;Socket接口在用户态通过系统调用机制进入内核;内核中将系统调用作为一个特殊的中断来处理,以socket相关系统调用为例进行分析;socket相关系统调用的内核处理函数内部通过“多态机制&rdqu... 查看详情
docker学习笔记docker容器相关技术
...相关技术 轻量级虚拟化技术命名空间:namespace,隔离系统资源,进程、网络、文件系统等隔离控制组:cgroups,为容器技术而生,分配资源,用来限制、记录、隔离进程资源使用。 命名空间隔离:进程pid:进程隔离网络... 查看详情
oracle关于内存参数及大页设置的相关概念和设置之limits概念和配置
...PluggableAuthenticationModules)中pam_limits.so的配置文件,突破系统的默认限制,对系统访问资源有一定保护作用。limits.conf和sysctl.conf区别在於limits.conf是针对用户,而sysctl.conf是针对整个系统参数配置。limits.conf是pam_limits.so的配置文件... 查看详情
06-docker资源限制
...:对于Linux主机,如果没有足够的内存来执行其他重要的系统任务,将会抛出OOM(OutofMemoryException,内存溢出、内存泄漏、内存异常),随后系统会开始杀死进程以释放内存,凡是运行在宿主机的进程都有可能被kill,包括Dockerd和其它... 查看详情
11.16-18lsciipcsipcrm:清除ipc相关信息
lspci:显示所有PCI设备lspci命令用来显示系统中的所有PCI总线设备或是连接到该总线上的所有设备。lspci命令的参数选项及说明-v 显示详细信息-vv 显示更详细的信息-s 显示指定总线的信息[[email prot... 查看详情
winxp系统下怎么使用netuse命令
请说出操作步骤,谢谢.(中途会遇到拒绝访问怎么解决)经典答案另有加分.远程名称\\192.168.0.5\ipc$资源类型ipc状态OK#打开0#连接1命令成功完成接下来怎么做啊?怎么操作到另一台计算机?NetUse连接计算机或断开计算机与共享... 查看详情
jvm参数设置及条调优原理
... 堆大小设置JVM中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制;系统的可用虚拟内存限制;系统的可用物理内存限制。32位系统下,一般限制在1.5G~2G;64为操作系统对内存无限制。我在WindowsServer2... 查看详情
内核参数:ulimit详解
参考技术ALinux对于每个用户,系统限制其最大进程数。为提高性能,可以根据设备资源情况,设置各linux用户的最大进程数可以用ulimit-a来显示当前的各种用户进程限制。下面我把某linux用户的最大进程数设为10000个:ulimit-u10240对... 查看详情
windows系统相关命令及问题排查实践
1.如何查看哪个端口被哪个程序占用?Netstat–ano|findstr"80"->找到监听80端口的pidtasklist|findstr“<PID号>”-->从pid查找到对应的程序taskkill /pid 6040 /F-->杀死对应进程2.android-studio或者其他ide需要下载被qiang的资源... 查看详情
liunx
接下来逐个讲解与网卡网络、系统内核、系统负载、内存使用情况、当前启用终端数量、历史登录记录、命令执行记录以及救援诊断等相关命令的使用方法,这些命令都超级实用。1、ifconfig命令ifconfig命令用于获取网卡配置与网... 查看详情
04_用户权限及相关命令(代码片段)
01.用户和权限的基本概念1.1基本概念用户是Linux系统工作中重要的一环,用户管理包括用户与组管理在Linux系统中,不论是由本机或是远程登录系统,每个系统都必须拥有一个账号,并且对于不同的系统资源拥有不同的使用权限... 查看详情
怎么修改linux中sem的值
semget()可以使用系统调用semget()创建一个新的信号量集,或者存取一个已经存在的信号量集:系统调用:semget();原型:intsemget(key_tkey,intnsems,intsemflg);返回值:如果成功,则返回信号量集的IPC标识符。如果失败,则返回-1:errno=EACCES... 查看详情
ulimit命令
ulimit 通过一些参数选项来管理不同种类的系统资源。参数介绍:-H设置硬件资源限制.-S设置软件资源限制.-a显示当前所有的资源限制.-csize:设置core文件的最大值.单位:blocks-dsize:设置数据段的最大值.单位:kbytes-fsize:设置创建文件... 查看详情
ulimit命令
ulimit 通过一些参数选项来管理不同种类的系统资源。参数介绍:-H设置硬件资源限制.-S设置软件资源限制.-a显示当前所有的资源限制.-csize:设置core文件的最大值.单位:blocks-dsize:设置数据段的最大值.单位:kbytes-fsize:设置创建文件... 查看详情