Web服务器Tengine内核参数优化

开源技术OpenSkill 发表了文章 • 0 个评论 • 674 次浏览 • 2015-07-03 10:41 • 来自相关话题

内核参数的优化,主要是在Linux系统中针对Tengine应用而进行的系统内核参数优化,以下是我的优化例子:

net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse =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_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 30参数选项的含义介绍:net.ipv4.tcp_max_tw_buckets 选项用来设定timewait的数量,默认是180 000,这里设置为6000
net.ipv4.ip_local_port_range 选项用来设定允许系统打开的端口范围
net.ipv4.tcp_tw_recycle 选项用于设置启用timewait的快速回收
net.ipv4.tcp_tw_reuse 选项用于设置开启重用,允许将TIME-WAIT sockets重新用于新的TCP连接
net.ipv4.tcp_syncookies 选项用于设置开启SYN Cookies,当出现SYN等待队列溢出时,启用cookies进行处理
net.core.somaxconn 选项的默认值是128,这个参数用于调节系统同时发起的tcp连接数,在高并发的请求中,默认的值可能会导致链接超时或者重传,因此,需要结合并发请求数来调节此值
net.core.netdev_max_backlog 选项表示当每个网络接口数据包的速率比内核处理这些包的速率快时,允许发送到队列的数据包的最大数目
net.ipv4.tcp_max_orphans 选项用于设定系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,孤立连接将立即被复位炳打印出警告信息。这个限制只是为了防止简单的DOS攻击。不能过分依靠这个限制甚至人为减小这个值,更多的情况下应该增加这个值
net.ipv4.tcp_max_syn_backlog 选项用于记录那些尚未收到客户端确认信息的连接请求的最大值。对于有128MB内存的系统而言,此参数的默认值是1024,对小内存的系统则是128
net.ipv4.tcp_synack_retries 参数的值决定了内核放弃连接之前发送SYN+ACK包的数量
net.ipv4.tcp_syn_retries 选项表示在内核放弃建立连接之前发送SYN包的数量。如果发送端要求关闭套接字,net.ipv4.tcp_fin_timeout选项决定了套接字保持在FIN-WAIT-2状态的时间。接收端可以出错并永远不关闭连接,甚至以外宕机
net.ipv4.tcp_fin_timeout 的默认值是60秒。需要注意的是,即使一个负载很小的Web服务器,也会出现因为大量的死套接字而产生内存溢出的风险。FIN-WAIT-2的危险比FIN-WAIT-1要小,因为它最多只能消耗1.5KB的内存,但是其生存期长些
net.ipv4.tcp_keepalive_time 选项表示当keeplive启用的时候,TCP发送keepalive消息的频度。默认值是2(单位是小时) 查看全部


内核参数的优化,主要是在Linux系统中针对Tengine应用而进行的系统内核参数优化,以下是我的优化例子:


net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse =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_synack_retries = 1
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_fin_timeout = 1
net.ipv4.tcp_keepalive_time = 30
参数选项的含义介绍:
net.ipv4.tcp_max_tw_buckets 选项用来设定timewait的数量,默认是180 000,这里设置为6000
net.ipv4.ip_local_port_range 选项用来设定允许系统打开的端口范围
net.ipv4.tcp_tw_recycle 选项用于设置启用timewait的快速回收
net.ipv4.tcp_tw_reuse 选项用于设置开启重用,允许将TIME-WAIT sockets重新用于新的TCP连接
net.ipv4.tcp_syncookies 选项用于设置开启SYN Cookies,当出现SYN等待队列溢出时,启用cookies进行处理
net.core.somaxconn 选项的默认值是128,这个参数用于调节系统同时发起的tcp连接数,在高并发的请求中,默认的值可能会导致链接超时或者重传,因此,需要结合并发请求数来调节此值
net.core.netdev_max_backlog 选项表示当每个网络接口数据包的速率比内核处理这些包的速率快时,允许发送到队列的数据包的最大数目
net.ipv4.tcp_max_orphans 选项用于设定系统中最多有多少个TCP套接字不被关联到任何一个用户文件句柄上。如果超过这个数字,孤立连接将立即被复位炳打印出警告信息。这个限制只是为了防止简单的DOS攻击。不能过分依靠这个限制甚至人为减小这个值,更多的情况下应该增加这个值
net.ipv4.tcp_max_syn_backlog 选项用于记录那些尚未收到客户端确认信息的连接请求的最大值。对于有128MB内存的系统而言,此参数的默认值是1024,对小内存的系统则是128
net.ipv4.tcp_synack_retries 参数的值决定了内核放弃连接之前发送SYN+ACK包的数量
net.ipv4.tcp_syn_retries 选项表示在内核放弃建立连接之前发送SYN包的数量。如果发送端要求关闭套接字,net.ipv4.tcp_fin_timeout选项决定了套接字保持在FIN-WAIT-2状态的时间。接收端可以出错并永远不关闭连接,甚至以外宕机
net.ipv4.tcp_fin_timeout 的默认值是60秒。需要注意的是,即使一个负载很小的Web服务器,也会出现因为大量的死套接字而产生内存溢出的风险。FIN-WAIT-2的危险比FIN-WAIT-1要小,因为它最多只能消耗1.5KB的内存,但是其生存期长些
net.ipv4.tcp_keepalive_time 选项表示当keeplive启用的时候,TCP发送keepalive消息的频度。默认值是2(单位是小时)

virtual memory exhausted: Cannot allocate memory

编程语言Ansible 回复了问题 • 2 人关注 • 3 个回复 • 773 次浏览 • 2015-07-03 10:15 • 来自相关话题

npm install forever Error: SSL Error: SELF_SIGNED_CERT_IN_CHAIN

开源技术Ansible 回复了问题 • 2 人关注 • 1 个回复 • 1046 次浏览 • 2015-07-02 23:27 • 来自相关话题

net.ipv4.netfilter.nf_conntrack_max" is an unknown key

开源技术采菊篱下 回复了问题 • 2 人关注 • 1 个回复 • 1377 次浏览 • 2015-07-02 23:03 • 来自相关话题

postfix邮件发送error

开源技术OpenSkill 回复了问题 • 2 人关注 • 1 个回复 • 1068 次浏览 • 2015-07-02 22:53 • 来自相关话题

在容器内部无法运行内部进程

大数据/云计算Ansible 回复了问题 • 1 人关注 • 1 个回复 • 667 次浏览 • 2015-07-02 22:18 • 来自相关话题

高并发linux生产服务器内核参数优化

开源技术Ansible 发表了文章 • 0 个评论 • 734 次浏览 • 2015-07-02 16:11 • 来自相关话题

说明:本优化案例适合apache,nginx,squid多种等web应用,特殊的业务可以做调整

所谓内核优化,主要是在Linux系统中针对业务服务应用而进行的系统内核参数优化,优化并无特殊的标准,下面以常见生产环境linux的内核优化为例讲解,仅供大家参考,欢迎拍砖。

net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.ip_local_port_range = 400065000
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.core.somaxconn = 16384
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_max_orphans = 16384
#以下参数是对iptables防火墙的优化,防火墙不开会提示,可以忽略不理。
net.ipv4.ip_conntrack_max = 25000000
net.ipv4.netfilter.ip_conntrack_max=25000000
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=180
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait=120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait=60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait=120将上面的内核参数值加入/etc/sysctl.conf文件中,然后执行如下命令使之生效:sysctl  -p
参数解释参考:http://yangrong.blog.51cto.com/6945369/1321594 查看全部
说明:本优化案例适合apache,nginx,squid多种等web应用,特殊的业务可以做调整


所谓内核优化,主要是在Linux系统中针对业务服务应用而进行的系统内核参数优化,优化并无特殊的标准,下面以常见生产环境linux的内核优化为例讲解,仅供大家参考,欢迎拍砖。


net.ipv4.tcp_fin_timeout = 2
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_keepalive_time = 600
net.ipv4.ip_local_port_range = 400065000
net.ipv4.tcp_max_syn_backlog = 16384
net.ipv4.tcp_max_tw_buckets = 36000
net.ipv4.route.gc_timeout = 100
net.ipv4.tcp_syn_retries = 1
net.ipv4.tcp_synack_retries = 1
net.core.somaxconn = 16384
net.core.netdev_max_backlog = 16384
net.ipv4.tcp_max_orphans = 16384
#以下参数是对iptables防火墙的优化,防火墙不开会提示,可以忽略不理。
net.ipv4.ip_conntrack_max = 25000000
net.ipv4.netfilter.ip_conntrack_max=25000000
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established=180
net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait=120
net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait=60
net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait=120
将上面的内核参数值加入/etc/sysctl.conf文件中,然后执行如下命令使之生效:sysctl  -p
参数解释参考:http://yangrong.blog.51cto.com/6945369/1321594

闰秒:让互联网公司倍感厌烦的一秒

互联网资讯Ansible 发表了文章 • 0 个评论 • 641 次浏览 • 2015-07-01 10:56 • 来自相关话题

这多出的“1秒”将加在6月30日午夜。由于北京处于东八时区,所以将在7月1日7:59:59后面增加1秒,届时会出现7:59:60的特殊现象。据悉,这是自1972年启用闰秒以来的第26次增加闰秒。离我们最近的一次闰秒,出现在2012年。









受到闰秒影响的网站之一是社交新闻网站Reddit。Reddit通过Twitter发表声明称,闰秒造成利用Java开发的开放源代码数据库Apache Cassandra出现故障,“太平洋标准时间下午5时,我们遭遇与闰秒相关的Java/Cassandra故障,我们在尽力恢复服务”。

Mozilla基金会称,闰秒是利用Java开发的开放源代码Hadoop遭遇故障的罪魁祸首。网站可靠性工程师埃里克·齐根霍恩(Eric Ziegenhorn)在一份报告中称,Java出现故障和闰秒是相关的,因为它们是同步发生的,“运行Hadoop、ElasticSearch等Java应用的服务器不能正常运行。我们认为这与闰秒有关,因为两者是同时发生的”。我们服务器有台跑着java程序的服务器cpu表现如下:










不过还好,对我们服务没有太大影响,小伙伴们,你们遭受到了痛苦吗????
 
  查看全部
1.png


这多出的“1秒”将加在6月30日午夜。由于北京处于东八时区,所以将在7月1日7:59:59后面增加1秒,届时会出现7:59:60的特殊现象。据悉,这是自1972年启用闰秒以来的第26次增加闰秒。离我们最近的一次闰秒,出现在2012年。


2.png


3.png
受到闰秒影响的网站之一是社交新闻网站Reddit。Reddit通过Twitter发表声明称,闰秒造成利用Java开发的开放源代码数据库Apache Cassandra出现故障,“太平洋标准时间下午5时,我们遭遇与闰秒相关的Java/Cassandra故障,我们在尽力恢复服务”。

Mozilla基金会称,闰秒是利用Java开发的开放源代码Hadoop遭遇故障的罪魁祸首。网站可靠性工程师埃里克·齐根霍恩(Eric Ziegenhorn)在一份报告中称,Java出现故障和闰秒是相关的,因为它们是同步发生的,“运行Hadoop、ElasticSearch等Java应用的服务器不能正常运行。我们认为这与闰秒有关,因为两者是同时发生的”。
我们服务器有台跑着java程序的服务器cpu表现如下:

4.jpg


5.jpg

不过还好,对我们服务没有太大影响,小伙伴们,你们遭受到了痛苦吗????
 
 

使用ansible的copy模块报错

开源技术Ansible 回复了问题 • 2 人关注 • 1 个回复 • 1138 次浏览 • 2015-06-30 19:49 • 来自相关话题

部署使用varnish

开源技术小白菜 发表了文章 • 0 个评论 • 545 次浏览 • 2015-06-30 12:02 • 来自相关话题

节点:192.168.83.46 部署了LAMP+nagios监控系统开发80端口
节点:192.168.83.47 部署varnish做46的缓冲机制

部署varnish

[16:13:03 root:~ Slave] # useradd -s /sbin/nologin varnish

[16:13:41 root:~ Slave] # mkdir /data/varnish/cache

[16:13:41 root:~ Slave] # mkdir /data/varnish/cache

[16:14:03 root:~ Slave] # mkdir /data/varnish/log

[16:15:06 root:~ Slave] # chown -R varnish:varnish /data/varnish/cache

[16:15:39 root:~ Slave] # chown -R varnish:varnish /data/varnish/log

Varnish的官方网址为
http://varnish-cache.org
可以在这里下载最新版本的软件。在安装Varnish前需要安装PCRE库。如果没有安装该库,在Varnish2以上版本编译时,就会提示找不到PCRE库PCRE库则可以兼容正则表达式,所以必须先安装。下面介绍其安装过程。

[16:17:27 root:/opt/varnish Slave] # tar -zxvf pcre-8.00.tar.gz

[16:17:42 root:/opt/varnish Slave] # cd pcre-8.00

[16:18:58 root:/opt/varnish/pcre-8.00 Slave] # ./configure --prefix=/usr/local/pcre/

[16:19:39 root:/opt/varnish/pcre-8.00 Slave] # make && make install

安装varnish

[16:20:31 root:/opt/varnish Slave] # tar -zxvf varnish-2.0.6.tar.gz

export PKG_CONFIG_PATH=/app/soft/varnish/lib/pkgconfig/ 这一行一定要有,不然在编译的时候会报错。这行用于指定Varnish 查找PCRE库的路径,如果PCRE安装到其他路径下,在这里指定即可,
Varnish默认查找PCRE库的路径为usr/local/lib/pkgconfig。

[16:23:03 root:/opt/varnish Slave] # export PKG_CONFIG_PATH=/app/soft/varnish/lib/pkgconfig/

[16:24:24 root:/opt/varnish/varnish-2.0.6 Slave] # ./configure -prefix=/app/soft/varnish -enable-debugging-symbols -enable-developer-warnings -enable-dependency-tracking

[16:24:47 root:/opt/varnish/varnish-2.0.6 Slave] # make

[16:24:47 root:/opt/varnish/varnish-2.0.6 Slave] # make install

[16:25:27 root:/opt/varnish/varnish-2.0.6 Slave] # cp redhat/varnish.initrc /etc/init.d/varnish

[16:25:38 root:/opt/varnish/varnish-2.0.6 Slave] # cp redhat/varnish.sysconfig /etc/sysconfig/varnish

进入varnish配置文件进行配置修改

[16:31:49 root:/app/soft/varnish/etc/varnish Slave] # cd /app/soft/varnish/etc/varnish

[16:32:21 root:/app/soft/varnish/etc/varnish Slave] # vim default.vcl



[16:25:57 root:/opt/varnish/varnish-2.0.6 Slave] # /app/soft/varnish/sbin/varnishd -f /app/soft/varnish/etc/varnish/default.vcl -s malloc,2G -T 127.0.0.1:2000 -a 0.0.0.0:8080

[16:26:37 root:/opt/varnish/varnish-2.0.6 Slave] # ps -ef |grep varnishd

Varnish 启动运行信息

[16:27:24 root:/app/soft/varnish/bin Slave] # cd /app/soft/varnish/bin

[16:28:06 root:/app/soft/varnish/bin Slave] # /app/soft/varnish/bin/varnishlog

[16:28:17 root:/app/soft/varnish/bin Slave] # /app/soft/varnish/bin/varnishstat

杀掉varnish

[16:28:49 root:/app/soft/varnish/bin Slave] # killall varnishd

[16:29:11 root:/app/soft/varnish/bin Slave] # /app/soft/varnish/sbin/varnishd -f /app/soft/varnish/etc/varnish/default.vcl -s malloc,2G -T 127.0.0.1:2000 -a 0.0.0.0:8080 -f /app/soft/varnish/etc/varnish/default.vcl


[16:29:45 root:/app/soft/varnish/bin Slave] # ps -ef |grep varnishd

查看日志

[16:30:37 root:/app/soft/varnish/bin Slave] # /app/soft/varnish/bin/varnishlog

查看运行状态

[16:30:37 root:/app/soft/varnish/bin Slave] # /app/soft/varnish/bin/varnishstat 查看全部
节点:192.168.83.46   部署了LAMP+nagios监控系统开发80端口
节点:192.168.83.47 部署varnish做46的缓冲机制

部署varnish

[16:13:03 root:~ Slave] # useradd -s /sbin/nologin varnish

[16:13:41 root:~ Slave] # mkdir /data/varnish/cache

[16:13:41 root:~ Slave] # mkdir /data/varnish/cache

[16:14:03 root:~ Slave] # mkdir /data/varnish/log

[16:15:06 root:~ Slave] # chown -R varnish:varnish /data/varnish/cache

[16:15:39 root:~ Slave] # chown -R varnish:varnish /data/varnish/log

Varnish的官方网址为
http://varnish-cache.org

可以在这里下载最新版本的软件。在安装Varnish前需要安装PCRE库。如果没有安装该库,在Varnish2以上版本编译时,就会提示找不到PCRE库PCRE库则可以兼容正则表达式,所以必须先安装。下面介绍其安装过程。

[16:17:27 root:/opt/varnish Slave] # tar -zxvf pcre-8.00.tar.gz

[16:17:42 root:/opt/varnish Slave] # cd pcre-8.00

[16:18:58 root:/opt/varnish/pcre-8.00 Slave] # ./configure --prefix=/usr/local/pcre/

[16:19:39 root:/opt/varnish/pcre-8.00 Slave] # make && make install

安装varnish

[16:20:31 root:/opt/varnish Slave] # tar -zxvf varnish-2.0.6.tar.gz

export PKG_CONFIG_PATH=/app/soft/varnish/lib/pkgconfig/ 这一行一定要有,不然在编译的时候会报错。这行用于指定Varnish 查找PCRE库的路径,如果PCRE安装到其他路径下,在这里指定即可,
Varnish默认查找PCRE库的路径为usr/local/lib/pkgconfig。

[16:23:03 root:/opt/varnish Slave] # export PKG_CONFIG_PATH=/app/soft/varnish/lib/pkgconfig/

[16:24:24 root:/opt/varnish/varnish-2.0.6 Slave] # ./configure -prefix=/app/soft/varnish -enable-debugging-symbols -enable-developer-warnings -enable-dependency-tracking

[16:24:47 root:/opt/varnish/varnish-2.0.6 Slave] # make

[16:24:47 root:/opt/varnish/varnish-2.0.6 Slave] # make install

[16:25:27 root:/opt/varnish/varnish-2.0.6 Slave] # cp redhat/varnish.initrc /etc/init.d/varnish

[16:25:38 root:/opt/varnish/varnish-2.0.6 Slave] # cp redhat/varnish.sysconfig /etc/sysconfig/varnish

进入varnish配置文件进行配置修改

[16:31:49 root:/app/soft/varnish/etc/varnish Slave] # cd /app/soft/varnish/etc/varnish

[16:32:21 root:/app/soft/varnish/etc/varnish Slave] # vim default.vcl

lip_image001.png
[16:25:57 root:/opt/varnish/varnish-2.0.6 Slave] # /app/soft/varnish/sbin/varnishd -f /app/soft/varnish/etc/varnish/default.vcl -s malloc,2G -T 127.0.0.1:2000 -a 0.0.0.0:8080

[16:26:37 root:/opt/varnish/varnish-2.0.6 Slave] # ps -ef |grep varnishd

Varnish 启动运行信息

[16:27:24 root:/app/soft/varnish/bin Slave] # cd /app/soft/varnish/bin

[16:28:06 root:/app/soft/varnish/bin Slave] # /app/soft/varnish/bin/varnishlog

[16:28:17 root:/app/soft/varnish/bin Slave] # /app/soft/varnish/bin/varnishstat

杀掉varnish

[16:28:49 root:/app/soft/varnish/bin Slave] # killall varnishd

[16:29:11 root:/app/soft/varnish/bin Slave] # /app/soft/varnish/sbin/varnishd -f /app/soft/varnish/etc/varnish/default.vcl -s malloc,2G -T 127.0.0.1:2000 -a 0.0.0.0:8080 -f /app/soft/varnish/etc/varnish/default.vcl


[16:29:45 root:/app/soft/varnish/bin Slave] # ps -ef |grep varnishd

查看日志

[16:30:37 root:/app/soft/varnish/bin Slave] # /app/soft/varnish/bin/varnishlog

查看运行状态

[16:30:37 root:/app/soft/varnish/bin Slave] # /app/soft/varnish/bin/varnishstat