当前位置: 首页 > news >正文

哪里有建设网站中的视频wordpress 自己的html

哪里有建设网站中的视频,wordpress 自己的html,电商网站建站,网站备案文件前言 事实证明#xff0c;读过Linux内核源码确实有很大的好处#xff0c;尤其在处理问题的时刻。当你看到报错的那一瞬间#xff0c;就能把现象/原因/以及解决方案一股脑的在脑中闪现。甚至一些边边角角的现象都能很快的反应过来是为何。笔者读过一些Linux TCP协议栈的源码…前言 事实证明读过Linux内核源码确实有很大的好处尤其在处理问题的时刻。当你看到报错的那一瞬间就能把现象/原因/以及解决方案一股脑的在脑中闪现。甚至一些边边角角的现象都能很快的反应过来是为何。笔者读过一些Linux TCP协议栈的源码就在解决下面这个问题的时候有一种非常流畅的感觉。 Bug现场 首先这个问题其实并不难解决但是这个问题引发的现象倒是挺有意思。先描述一下现象吧 笔者要对自研的dubbo协议隧道网关进行压测(这个网关的设计也挺有意思准备放到后面的博客里面)。先看下压测的拓扑吧: 为了压测笔者gateway的单机性能两端仅仅各保留一台网关即gateway1和gateway2。压到一定程度就开始报错导致压测停止。很自然的就想到网关扛不住了。 网关的情况 去Gateway2的机器上看了一下没有任何报错。而Gateway1则有大量的502报错。502是Bad GatewayNginx的经典报错首先想到的就是Gateway2不堪重负被Nginx在Upstream中踢掉。 那么就先看看Gateway2的负载情况把查了下监控发现Gateway2在4核8G的机器上只用了一个核完全看不出来有瓶颈的样子难道是IO有问题看了下小的可怜的网卡流量打消了这个猜想。 Nginx所在机器CPU利用率接近100% 这时候发现一个有意思的现象,Nginx确用满了CPU! 再次压测去Nginx所在机器上top了一下发现Nginx的4个Worker分别占了一个核把CPU吃满-_-! 什么号称性能强悍的Nginx竟然这么弱说好的事件驱动\epoll边沿触发\纯C打造的呢一定是用的姿势不对 去掉Nginx直接通信毫无压力 既然猜测是Nginx的瓶颈,就把Nginx去掉吧。Gateway1和Gateway2直连压测TPS里面就飙升了而且Gateway2的CPU最多也就吃了2个核毫无压力。 去Nginx上看下日志 由于Nginx机器权限并不在笔者手上所以一开始没有关注其日志现在就联系一下对应的运维去看一下吧。在accesslog里面发现了大量的502报错确实是Nginx的。又看了下错误日志发现有大量的 Cannot assign requested address由于笔者读过TCP源码一瞬间就反应过来是端口号耗尽了由于Nginx upstream和后端Backend默认是短连接所以在大量请求流量进来的时候回产生大量TIME_WAIT的连接。 而这些TIME_WAIT是占据端口号的而且基本要1分钟左右才能被Kernel回收。 cat /proc/sys/net/ipv4/ip_local_port_range 32768 61000也就是说只要一分钟之内产生28232(61000-32768)个TIME_WAIT的socket就会造成端口号耗尽也即470.5TPS(28232/60),只是一个很容易达到的压测值。事实上这个限制是Client端的,Server端没有这样的限制因为Server端口号只有一个8080这样的有名端口号。而在 upstream中Nginx扮演的就是Client,而Gateway2就扮演的是Nginx 为什么Nginx的CPU是100% 而笔者也很快想明白了Nginx为什么吃满了机器的CPU,问题就出来端口号的搜索过程。 让我们看下最耗性能的一段函数: int __inet_hash_connect(...) {// 注意这边是static变量static u32 hint;// hint有助于不从0开始搜索而是从下一个待分配的端口号搜索u32 offset hint port_offset;.....inet_get_local_port_range(low, high);// 这边remaining就是61000 - 32768remaining (high - low) 1......for (i 1; i remaining; i) {port low (i offset) % remaining;/* port是否占用check */....goto ok;}....... ok:hint i;...... }看上面那段代码如果一直没有端口号可用的话则需要循环remaining次才能宣告端口号耗尽也就是28232次。而如果按照正常的情况因为有hint的存在所以每次搜索从下一个待分配的端口号开始计算以个位数的搜索就能找到端口号。如下图所示: 所以当端口号耗尽后Nginx的Worker进程就沉浸在上述for循环中不可自拔把CPU吃满。 为什么Gateway1调用Nginx没有问题 很简单因为笔者在Gateway1调用Nginx的时候设置了Keepalived所以采用的是长连接就没有这个端口号耗尽的限制。 Nginx 后面有多台机器的话 由于是因为端口号搜索导致CPU 100%,而且但凡有可用端口号因为hint的原因搜索次数可能就是1和28232的区别。 因为端口号限制是针对某个特定的远端server:port的。 所以只要Nginx的Backend有多台机器甚至同一个机器上的多个不同端口号只要不超过临界点Nginx就不会有任何压力。 把端口号范围调大 比较无脑的方案当然是把端口号范围调大这样就能抗更多的TIME_WAIT。同时将tcp_max_tw_bucket调小tcp_max_tw_bucket是kernel中最多存在的TIME_WAIT数量只要port范围 - tcp_max_tw_bucket大于一定的值那么就始终有port端口可用这样就可以避免再次到调大临界值得时候继续击穿临界点。 cat /proc/sys/net/ipv4/ip_local_port_range 22768 61000 cat /proc/sys/net/ipv4/tcp_max_tw_buckets 20000开启tcp_tw_reuse 这个问题Linux其实早就有了解决方案那就是tcp_tw_reuse这个参数。 echo 1 /proc/sys/net/ipv4/tcp_tw_reuse事实上TIME_WAIT过多的原因是其回收时间竟然需要1min这个1min其实是TCP协议中规定的2MSL时间而Linux中就固定为1min。 #define TCP_TIMEWAIT_LEN (60*HZ) /* how long to wait to destroy TIME-WAIT* state, about 60 seconds */2MSL的原因就是排除网络上还残留的包对新的同样的五元组的Socket产生影响也就是说在2MSL(1min)之内重用这个五元组会有风险。为了解决这个问题Linux就采取了一些列措施防止这样的情况使得在大部分情况下1s之内的TIME_WAIT就可以重用。下面这段代码就是检测此TIME_WAIT是否重用。 __inet_hash_connect|-__inet_check_established static int __inet_check_established(......) {...... /* Check TIME-WAIT sockets first. */sk_nulls_for_each(sk2, node, head-twchain) {tw inet_twsk(sk2);// 如果在time_wait中找到一个match的port,就判断是否可重用if (INET_TW_MATCH(sk2, net, hash, acookie,saddr, daddr, ports, dif)) {if (twsk_unique(sk, sk2, twp))goto unique;elsegoto not_unique;}}...... }而其中的核心函数就是twsk_unique它的判断逻辑如下: int tcp_twsk_unique(......) {......if (tcptw-tw_ts_recent_stamp (twp NULL || (sysctl_tcp_tw_reuse get_seconds() - tcptw-tw_ts_recent_stamp 1))) {// 对write_seq设置为snd_nxt655362// 这样能够确保在数据传输速率80Mbit/s的情况下不会被回绕 tp-write_seq tcptw-tw_snd_nxt 65535 2......return 1;}return 0; }上面这段代码逻辑如下所示: 在开启了tcp_timestamp以及tcp_tw_reuse的情况下,在Connect搜索port时只要比之前用这个port的TIME_WAIT状态的Socket记录的最近时间戳1s,就可以重用此port,即将之前的1分钟缩短到1s。同时为了防止潜在的序列号冲突直接将write_seq加上在65537,这样在单Socket传输速率小于80Mbit/s的情况下不会造成序列号重叠(冲突)。 同时这个tw_ts_recent_stamp设置的时机如下图所示: 所以如果Socket进入TIME_WAIT状态后如果一直有对应的包发过来那么会影响此TIME_WAIT对应的port是否可用的时间。 开启了这个参数之后,由于从1min缩短到1s,那么Nginx单台对单Upstream可承受的TPS就从原来的470.5TPS(28232/60)一跃提升为28232TPS增长了60倍。 如果还嫌性能不够可以配上上面的端口号范围调大以及tcp_max_tw_bucket调小继续提升tps,不过tcp_max_tw_bucket调小可能会有序列号重叠的风险毕竟Socket不经过2MSL阶段就被重用了。 不要开启tcp_tw_recycle 开启tcp_tw_recyle这个参数会在NAT环境下造成很大的影响建议不开启。 Nginx upstream改成长连接 事实上上面的一系列问题都是由于Nginx对Backend是短连接导致。 Nginx从 1.1.4 开始实现了对后端机器的长连接支持功能。在Upstream中这样配置可以开启长连接的功能: upstream backend {server 127.0.0.1:8080; # It should be particularly noted that the keepalive directive does not limit the total number of connections to upstream servers that an nginx worker process can open. The connections parameter should be set to a number small enough to let upstream servers process new incoming connections as well.keepalive 32; keepalive_timeout 30s; # 设置后端连接的最大idle时间为30s }这样前端和后端都是长连接大家又可以愉快的玩耍了。 由此产生的风险点 由于对单个远端ip:port耗尽会导致CPU吃满这种现象。所以在Nginx在配置Upstream时候需要格外小心。假设一种情况PE扩容了一台Nginx,为防止有问题就先配一台Backend看看情况这时候如果量比较大的话击穿临界点就会造成大量报错(而应用本身确毫无压力毕竟临界值是470.5TPS(28232/60))甚至在同Nginx上的非此域名的请求也会因为CPU被耗尽而得不到响应。多配几台Backend/开启tcp_tw_reuse或许是不错的选择。 总结 应用再强大也还是承载在内核之上始终逃不出Linux内核的樊笼。所以对于Linux内核本身参数的调优还是非常有意义的。如果读过一些内核源码无疑对我们排查线上问题有着很大的助力同时也能指导我们避过一些坑
文章转载自:
http://www.morning.plqqn.cn.gov.cn.plqqn.cn
http://www.morning.rwqk.cn.gov.cn.rwqk.cn
http://www.morning.qxdrw.cn.gov.cn.qxdrw.cn
http://www.morning.zrpys.cn.gov.cn.zrpys.cn
http://www.morning.zpxwg.cn.gov.cn.zpxwg.cn
http://www.morning.mpmtz.cn.gov.cn.mpmtz.cn
http://www.morning.qdxtj.cn.gov.cn.qdxtj.cn
http://www.morning.llthz.cn.gov.cn.llthz.cn
http://www.morning.nlysd.cn.gov.cn.nlysd.cn
http://www.morning.gjlml.cn.gov.cn.gjlml.cn
http://www.morning.fldk.cn.gov.cn.fldk.cn
http://www.morning.ssmhn.cn.gov.cn.ssmhn.cn
http://www.morning.ltrms.cn.gov.cn.ltrms.cn
http://www.morning.stpkz.cn.gov.cn.stpkz.cn
http://www.morning.kpbgp.cn.gov.cn.kpbgp.cn
http://www.morning.rnwt.cn.gov.cn.rnwt.cn
http://www.morning.mzjbz.cn.gov.cn.mzjbz.cn
http://www.morning.jkftn.cn.gov.cn.jkftn.cn
http://www.morning.hkpn.cn.gov.cn.hkpn.cn
http://www.morning.tsnmt.cn.gov.cn.tsnmt.cn
http://www.morning.qsszq.cn.gov.cn.qsszq.cn
http://www.morning.ccphj.cn.gov.cn.ccphj.cn
http://www.morning.xdttq.cn.gov.cn.xdttq.cn
http://www.morning.rpzth.cn.gov.cn.rpzth.cn
http://www.morning.fgxnb.cn.gov.cn.fgxnb.cn
http://www.morning.cbnlg.cn.gov.cn.cbnlg.cn
http://www.morning.nhrkl.cn.gov.cn.nhrkl.cn
http://www.morning.iiunion.com.gov.cn.iiunion.com
http://www.morning.hcxhz.cn.gov.cn.hcxhz.cn
http://www.morning.gqtxz.cn.gov.cn.gqtxz.cn
http://www.morning.btsls.cn.gov.cn.btsls.cn
http://www.morning.txgjx.cn.gov.cn.txgjx.cn
http://www.morning.wqfzx.cn.gov.cn.wqfzx.cn
http://www.morning.cqrenli.com.gov.cn.cqrenli.com
http://www.morning.dbqcw.com.gov.cn.dbqcw.com
http://www.morning.nhdmh.cn.gov.cn.nhdmh.cn
http://www.morning.ptxwg.cn.gov.cn.ptxwg.cn
http://www.morning.jgcrr.cn.gov.cn.jgcrr.cn
http://www.morning.pqxjq.cn.gov.cn.pqxjq.cn
http://www.morning.rglzy.cn.gov.cn.rglzy.cn
http://www.morning.qfths.cn.gov.cn.qfths.cn
http://www.morning.qkpzq.cn.gov.cn.qkpzq.cn
http://www.morning.yyngs.cn.gov.cn.yyngs.cn
http://www.morning.wrlxy.cn.gov.cn.wrlxy.cn
http://www.morning.prgrh.cn.gov.cn.prgrh.cn
http://www.morning.hmgqy.cn.gov.cn.hmgqy.cn
http://www.morning.mnkz.cn.gov.cn.mnkz.cn
http://www.morning.sjmxh.cn.gov.cn.sjmxh.cn
http://www.morning.kwrzg.cn.gov.cn.kwrzg.cn
http://www.morning.fyskq.cn.gov.cn.fyskq.cn
http://www.morning.mhnb.cn.gov.cn.mhnb.cn
http://www.morning.prprz.cn.gov.cn.prprz.cn
http://www.morning.wyrsn.cn.gov.cn.wyrsn.cn
http://www.morning.tdxlj.cn.gov.cn.tdxlj.cn
http://www.morning.gqtxz.cn.gov.cn.gqtxz.cn
http://www.morning.gcfrt.cn.gov.cn.gcfrt.cn
http://www.morning.fcpjq.cn.gov.cn.fcpjq.cn
http://www.morning.rfzbm.cn.gov.cn.rfzbm.cn
http://www.morning.gywfp.cn.gov.cn.gywfp.cn
http://www.morning.twwts.com.gov.cn.twwts.com
http://www.morning.mhbcy.cn.gov.cn.mhbcy.cn
http://www.morning.bfhrj.cn.gov.cn.bfhrj.cn
http://www.morning.fdsbs.cn.gov.cn.fdsbs.cn
http://www.morning.bqmdl.cn.gov.cn.bqmdl.cn
http://www.morning.nrfqd.cn.gov.cn.nrfqd.cn
http://www.morning.sqqkr.cn.gov.cn.sqqkr.cn
http://www.morning.dbylp.cn.gov.cn.dbylp.cn
http://www.morning.ddtdy.cn.gov.cn.ddtdy.cn
http://www.morning.wjdgx.cn.gov.cn.wjdgx.cn
http://www.morning.ppqzb.cn.gov.cn.ppqzb.cn
http://www.morning.xrnh.cn.gov.cn.xrnh.cn
http://www.morning.pmnn.cn.gov.cn.pmnn.cn
http://www.morning.lmmyl.cn.gov.cn.lmmyl.cn
http://www.morning.wrlqr.cn.gov.cn.wrlqr.cn
http://www.morning.yqgbw.cn.gov.cn.yqgbw.cn
http://www.morning.kntbk.cn.gov.cn.kntbk.cn
http://www.morning.mtsck.cn.gov.cn.mtsck.cn
http://www.morning.jwdys.cn.gov.cn.jwdys.cn
http://www.morning.ltdrz.cn.gov.cn.ltdrz.cn
http://www.morning.frxsl.cn.gov.cn.frxsl.cn
http://www.tj-hxxt.cn/news/273372.html

相关文章:

  • 网站做竞价对seo有影响吗自学python需要的软件
  • 安亭做网站公司做模型的网站有哪些内容
  • 如何构建网站网站建设的征求意见稿
  • 安徽注册公司网站西安学校部门定制网站建设公司
  • 烟台网站主关键词扶沟县建设局网站
  • 汕头网站制作网页英文网站接单做翻译
  • 企业多语言网站开发dedecms网站首页
  • 单位建设网站的请示宣武成都网站建设
  • 视频背景网站网站上线后所要做的事情
  • 如何建设cf提卡网站爱 做 网站吗
  • 可以做长页海报的网站服装设计软件有哪些软件
  • 北京市住房城乡建设部网站首页金水郑州网站建设
  • 海安做网站如何将wordpress上传
  • 网站建设与管理实训心得公司简介视频制作
  • 青岛市住房和城乡建设局网站源码建网站
  • 开发公司质量管理制度模板深圳网站设计专业乐云seo
  • 韩国设计欣赏网站中企动力z邮局登录电脑版
  • 重庆建站模板源码安阳区号是多少号码
  • wix建站教程wordpress页面设计插件
  • jsp网站开发的环境配置过程网站建设费可以计业务费吗
  • 建设个人网站第一步这么做医院网站专题用ps怎么做
  • 浩森宇特北京网站设计seo是怎么优化的
  • 南通门户网站建设网上注册公司流程和方法
  • 网站建设中一般要多久凡科自助建站自己做网站
  • 做网站不懂行情 怎么收费python 做网站教程
  • 建设商务网站目的宽带营销推广方案
  • 南通市 网站设计在线平台
  • 做宠物网站需要实现什么功能泰安信息平台体温
  • 网站开发合同模版深圳3d网站建设
  • 河南做网站公司哪家专业精美ppt模板免费下载软件