PG_操作系统配置优化

本节介绍Postgresql安装前的操作系统配置,良好的配置能让PG运行的更好;

#禁用 selinux

#临时
setenforce 0  
#永久生效
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config 

 #修改TCP内核参数

#调大系统中每一个端口最大的监听队列的长度
echo
2048 > /proc/sys/net/core/somaxconn

#禁用irqbalance

#irqbalance处于 Performance mode 时,irqbalance 会将中断尽可能均匀地分发给各个 CPU core,以充分利用 CPU 多核,提升性能。处于 Power-save mode 时,irqbalance 会将中断集中分配给第一个 CPU,以保证其它空闲 CPU 的睡眠时间,降低能耗。但实际中往往影响cpu的使用均衡,建议服务器环境中关闭。
service irqbalance stop systemctl stop irqbalance systemctl disable irqbalance chkconfig irqbalance off

#禁用cpuspeed

#cpuspeed指明单个CPU可以用的最大Hz数(默认值比较低)影响CPU性能
service cpuspeed stop
systemctl stop cpuspeed
systemctl disable cpuspeed
chkconfig cpuspeed off

 

#修改/etc/sysctl.conf文件

#将下列参数添加到sysctl.conf文件中

### pg
#内核参数最大打开句柄数
fs.nr_open = 20480000 #此参数限制并发未完成的异步请求数目,应该设置避免I/O子系统故障 fs.aio-max-nr = 1048576 #该参数决定了系统中所允许的文件句柄最大数目,文件句柄设置代表linux系统中可以打开的文件的数量 fs.file-max = 76724600 # 信号量, ipcs -l 或 -u 查看,每16个进程一组,每组信号量需要17个信号量。 #从左至右 依次是 SEMMSL SEMMNS SEMOPM SEMMNI #SEMMSL 单个信号集中容纳最大信号数量 #SEMMNS 整个系统中所有信号的最大数量 #SEMOPM 在单个信号集中可操作的最大信号数量 #SEMMNI 信号集的最大值:进程数/16 kernel.sem = 20 13000 20 650 # 所有共享内存段相加大小限制(建议内存的80%) kernel.shmall = 67108864 # 最大单个共享内存段大小(建议为内存一半), >9.2的版本已大幅降低共享内存的使用 kernel.shmmax = 274877906944 # 一共能生成多少共享内存段,每个PG数据库集群至少2个共享内存段 kernel.shmmni = 819200 net.core.netdev_max_backlog = 10000 net.core.rmem_default = 262144 # The default setting of the socket receive buffer in bytes. net.core.rmem_max = 4194304 # The maximum receive socket buffer size in bytes net.core.wmem_default = 262144 # The default setting (in bytes) of the socket send buffer. net.core.wmem_max = 4194304 # The maximum send socket buffer size in bytes. net.core.somaxconn = 4096 net.ipv4.tcp_max_syn_backlog = 4096 net.ipv4.tcp_keepalive_intvl = 20 net.ipv4.tcp_keepalive_probes = 3 net.ipv4.tcp_keepalive_time = 60 net.ipv4.tcp_mem = 8388608 12582912 16777216 net.ipv4.tcp_fin_timeout = 5 net.ipv4.tcp_synack_retries = 2 net.ipv4.tcp_syncookies = 1 # 开启SYN Cookies。当出现SYN等待队列溢出时,启用cookie来处理,可防范少量的SYN攻击 net.ipv4.tcp_timestamps = 1 # 减少time_wait net.ipv4.tcp_tw_recycle = 0 # 如果=1则开启TCP连接中TIME-WAIT套接字的快速回收,但是NAT环境可能导致连接失败,建议服务端关闭它 net.ipv4.tcp_tw_reuse = 1 # 开启重用。允许将TIME-WAIT套接字重新用于新的TCP连接 net.ipv4.tcp_max_tw_buckets = 262144 net.ipv4.tcp_rmem = 8192 87380 16777216 net.ipv4.tcp_wmem = 8192 65536 16777216 #net.nf_conntrack_max = 1200000 #net.netfilter.nf_conntrack_max = 1200000 vm.dirty_background_bytes = 409600000 # 系统脏页到达这个值,系统后台刷脏页调度进程 pdflush(或其他) 自动将(dirty_expire_centisecs/100)秒前的脏页刷到磁盘 # 默认为10%,大内存机器建议调整为直接指定多少字节 vm.dirty_expire_centisecs = 3000 # 比这个值老的脏页,将被刷到磁盘。3000表示30秒。 vm.dirty_background_ratio = 5 vm.dirty_ratio = 10 # 如果系统进程刷脏页太慢,使得系统脏页超过内存 95 % 时,则用户进程如果有写磁盘的操作(如fsync, fdatasync等调用),则需要主动把系统脏页刷出。 # 有效防止用户进程刷脏页,在单机多实例,并且使用CGROUP限制单实例IOPS的情况下非常有效。 vm.dirty_writeback_centisecs = 500 ##vm.extra_free_kbytes = 4096000 ##vm.min_free_kbytes = 2097152 vm.mmap_min_addr = 65536 vm.overcommit_memory = 0 # 在分配内存时,允许少量over malloc, 如果设置为 1, 则认为总是有足够的内存,内存较少的测试环境可以使用 1 . vm.overcommit_ratio = 90 # 当overcommit_memory = 2 时,用于参与计算允许指派的内存大小。 vm.swappiness = 1 # 关闭交换分区,3.5以后的内核和RedHat 2.6.32之后的内核,设置为0会禁止使用swap,从而引发out of memory,这种情况可以设置为1。1表示另可用swap也不杀掉进程 vm.zone_reclaim_mode = 0 #不使用NUMA net.ipv4.ip_local_port_range = 40000 65535 # 本地自动分配的TCP, UDP端口号范围 # vm.nr_hugepages = 66536 # 建议shared buffer设置超过64GB时 使用大页,页大小 /proc/meminfo Hugepagesize

修改之后 执行sysctl -p生效。

#配置/etc/security/limits.conf

#soft:代表警告的设定,可以超过这个设定值,但是超过后会有警告。
#hard:代表严格的设定,不允许超过这个设定的值。
#nproc: 是操作系统级别对每个用户创建的进程数的限制 
#nofile: 是每个进程可以打开的文件数的限制
#core:core文件生成,
限制内核文件的大小
#memlock:最大锁定内存地址空间

echo
"### pg" >> /etc/security/limits.conf echo "postgres soft nofile 1024000" >> /etc/security/limits.conf echo "postgres hard nofile 1024000" >> /etc/security/limits.conf echo "postgres soft nproc unlimited" >> /etc/security/limits.conf echo "postgres hard nproc unlimited" >> /etc/security/limits.conf echo "postgres soft core unlimited" >> /etc/security/limits.conf echo "postgres hard core unlimited" >> /etc/security/limits.conf echo "postgres soft memlock unlimited" >> /etc/security/limits.conf echo "postgres hard memlock unlimited" >> /etc/security/limits.conf

 

 

  

posted @ 2020-10-29 23:15  DUAN的博客  阅读(577)  评论(0)    收藏  举报