内核优化

1、Core文件简介

Core文件其实就是内存的映像,当程序崩溃时,存储内存的相应信息,主用用于对程序进行调试。当程序崩溃时便会产生core文件,其实准确的应该说是core dump 文件,默认生成位置与可执行程序位于同一目录下,文件名为core.***,其中***是某一数字。

2、什么是Core Dump
我们在开发(或使用)一个程序时,最怕的就是程序莫明其妙地当掉。虽然系统没事,但我们下次仍可能遇到相同的问题。于是这时操作系统就会把程序当掉 时的内存内容 dump 出来(现在通常是写在一个叫 core 的 file 里面),让 我们或是 debugger 做为参考。这个动作就叫作 core dump。 

一般的发行版,限制单进程最大可以打开1024个文件,这是远远不能满足高并发需求的,调整过程如下:

# ulimit –n 65535

将root启动的单一进程的最大可以打开的文件数设置为65535个。

# vim /etc/security/limits.conf
* hard core 0 表示对所有用户生产dump,但默认是注释了的 如果只想对某些用户或用户组打开core dump * soft nofile 65535 单个进程可打开的文件描述符的最大数(超过会警告) * hard nofile 65535 单个进程可打开的文件描述符的最大数(超过会报错) * soft nproc 单个用户可用的最大进程数量(超过会警告); * hard nproc 单个用户可用的最大进程数量(超过会报错); 其中'*'号表示修改所有用户的限制;

3、内核优化

vim  /etc/sysctl.conf

(这个目录主要是配置一些系统信息,而且它的内容全部是对应于/proc/sys/这个目录的子目录及文件。)

kernel.core_uses_pid = 0    可以控制产生的core文件的文件名中是否添加pid作为扩展,如果添加则文件内容为1,否则为0
kernel.core_pattern = core   该参数就是可以设定core dump文件的文件名及路径,以及可以利用管道将结果输入给管道右边的程序进行处理。
fs.suid_dumpable = 0

net.ipv4.tcp_fin_timeout = 2           #保持在FIN-WAIT-2状态的时间,使系统可以处理更多的连接。此参数值为整数,单位为秒。
net.ipv4.tcp_tw_reuse = 1              #开启重用,允许将TIME_WAIT socket用于新的TCP连接。默认为0,表示关闭。
net.ipv4.tcp_tw_recycle = 1            #开启TCP连接中TIME_WAIT socket的快速回收。默认值为0,表示关闭。
net.ipv4.tcp_syncookies = 1            #开启SYN cookie,出现SYN等待队列溢出时启用cookie处理,防范少量的SYN攻击。默认为0,表示关闭。
net.ipv4.tcp_keepalive_time = 600      #keepalived启用时TCP发送keepalived消息的拼度。默认位2小时。
net.ipv4.tcp_keepalive_probes = 5      #TCP发送keepalive探测以确定该连接已经断开的次数。根据情形也可以适当地缩短此值。
net.ipv4.tcp_keepalive_intvl = 15      #探测消息发送的频率,乘以tcp_keepalive_probes就得到对于从开始探测以来没有响应的连接杀除的时间。默认值为75秒,也就是没有活动的连接将在大约11分钟以后将被丢弃。对于普通应用来说,这个值有一些偏大,可以根据需要改小.特别是web类服务器需要改小该值。
net.ipv4.ip_local_port_range = 1024 65000 #指定外部连接的端口范围。默认值为32768 61000。
net.ipv4.tcp_max_syn_backlog = 262144  #表示SYN队列的长度,预设为1024,这里设置队列长度为262 144,以容纳更多的等待连接。
net.ipv4.tcp_max_tw_buckets =5000      #系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数值将立刻被清楚并输出警告信息。默认值为180000。对于squid来说效果不是很大,但可以控制TIME_WAIT套接字最大值,避免squid服务器被拖死。 
net.ipv4.tcp_syn_retries = 1           #表示在内核放弃建立连接之前发送SYN包的数量。
net.ipv4.tcp_synack_retries = 1        #设置内核放弃连接之前发送SYN+ACK包的数量。
net.core.somaxconn = 16384             #定义了系统中每一个端口最大的监听队列的长度, 对于一个经常处理新连接的高负载 web服务环境来说,默认值为128,偏小。
net.core.netdev_max_backlog = 16384    #表示当在每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许发送到队列的数据包的最大数量。
net.ipv4.tcp_max_orphans = 16384       #表示系统中最多有多少TCP套接字不被关联到任何一个用户文件句柄上。如果超过这里设置的数字,连接就会复位并输出警告信息。这个限制仅仅是为了防止简单的DoS攻击。此值不能太小。 

注意:

       1、其实每个'.'分割的就代表一个目录,例如,fs.file-max也就代表/proc/sys/fs/file-max。那么/proc/sys/是用来做什么的呢?大家都知道/proc是每次系统启动的时候都要重新挂载的,它反映了系统内存里面的一些状态。通过/proc/可以很好的了解到当前系统的一些信息。而/proc/sys/则是这些信息的一小部分而已。

    2、sysctl -p #生效

             -p   从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf中加载

             -w   临时改变某个指定参数的值,如

         sysctl -w net.ipv4.ip_forward=1

如果仅仅是想临时改变某个系统参数的值,可以用两种方法来实现,例如想启用IP路由转发功能

    1) #echo 1 > /proc/sys/net/ipv4/ip_forward

    2) #sysctl -w net.ipv4.ip_forward=1

4、centos 7 系统从/usr/lib/sysctl.d/*.conf 和 /etc/sysctl.d/*.conf 加载应用系统配置,加载顺序根据*.conf的文件名确定

手动加载所有的配置文件,执行:

# sysctl --system

单独指定配置文件加载,执行:

# sysctl -p filename.conf

也可以直接通过sysctl工具配置值,执行:

# sysctl kernel.sysrq=1   (效果等同:# echo "1" > /proc/sys/kernel/sysrq)

5、coredump文件抓取设置

ulimit -c unlimited
echo 1 > /proc/sys/kernel/core_uses_pid
echo "/tmp/core-%e-%s-%u-%g-%p-%t" > /proc/sys/kernel/core_pattern
echo 2 > /proc/sys/fs/suid_dumpable

https://blog.csdn.net/xinmeiwan/article/details/52934943  Core Dump详解

https://www.cnblogs.com/xiaodoujiaohome/p/6222895.html    Core文件作用、设置及用法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

少安在线锤人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值