解Bug之路-NAT引發(fā)的性能瓶頸-完整版?

一口Linux 2021-01-09 00:00

解Bug之路-NAT引發(fā)的性能瓶頸-完整版

筆者最近解決了一個(gè)非常曲折的問題,從抓包開始一路排查到不同內(nèi)核版本間的細(xì)微差異,最后才完美解釋了所有的現(xiàn)象。在這里將整個(gè)過程寫成博文記錄下來,希望能夠?qū)ψx者有所幫助。(篇幅可能會(huì)有點(diǎn)長(zhǎng),耐心看完,絕對(duì)物有所值~)

環(huán)境介紹

先來介紹一下出問題的環(huán)境吧,調(diào)用拓?fù)淙缦聢D所示:

調(diào)用拓?fù)鋱D


合作方的多臺(tái)機(jī)器用NAT將多個(gè)源ip映射成同一個(gè)出口ip 20.1.1.1,而我們內(nèi)網(wǎng)將多個(gè)Nginx映射成同一個(gè)目的ip 30.1.1.1。這樣,在防火墻和LVS之間,所有的請(qǐng)求始終是通過(20.1.1.1,30.1.1.1)這樣一個(gè)ip地址對(duì)進(jìn)行訪問。
同時(shí)還固定了一個(gè)參數(shù),那就是目的端口號(hào)始終是443。

短連接-HTTP1.0

由于對(duì)方是采用短連接和Nginx進(jìn)行交互的,而且采用的協(xié)議是HTTP-1.0。所以我們的Nginx在每個(gè)請(qǐng)求完成后,會(huì)主動(dòng)關(guān)閉連接,從而造成有大量的TIME_WAIT。

值得注意的是,TIME_WAIT取決于Server端和Client端誰(shuí)先關(guān)閉這個(gè)Socket。所以Nginx作為Server端先關(guān)閉的話,也必然會(huì)產(chǎn)生TIME_WAIT。

內(nèi)核參數(shù)配置

內(nèi)核參數(shù)配置如下所示:

cat /proc/sys/net/ipv4/tcp_tw_reuse 0
cat /proc/sys/net/ipv4/tcp_tw_recycle 0
cat /proc/sys/net/ipv4/tcp_timestamps 1

其中tcp_tw_recycle設(shè)置為0。這樣,可以有效解決tcp_timestamps和tcp_tw_recycle在NAT情況下導(dǎo)致的連接失敗問題。具體見筆者之前的博客:

https://my.oschina.net/alchemystar/blog/3119992

Bug現(xiàn)場(chǎng)

好了,介紹完環(huán)境,我們就可以正式描述Bug現(xiàn)場(chǎng)了。

Client端大量創(chuàng)建連接異常,而Server端無法感知

表象是合作方的應(yīng)用出現(xiàn)大量的創(chuàng)建連接異常,而Server端沒有任何關(guān)于這些異常的任何異常日志,仿佛就從來沒有出現(xiàn)過這些請(qǐng)求一樣。

LVS監(jiān)控曲線

出現(xiàn)問題后,筆者翻了下LVS對(duì)應(yīng)的監(jiān)控曲線,其中有個(gè)曲線的變現(xiàn)非常的詭異。如下圖所示:

什么情況?看上去像建立不了連接了?但是雖然業(yè)務(wù)有大量的報(bào)錯(cuò),依舊有很高的訪問量,看日志的話,每秒請(qǐng)求應(yīng)該在550向上!和這個(gè)曲線上面每秒只有30個(gè)新建連接是矛盾的!

每天發(fā)生的時(shí)間點(diǎn)非常接近

觀察了幾天后。發(fā)現(xiàn),每天都在10點(diǎn)左右開始發(fā)生報(bào)錯(cuò),同時(shí)在12點(diǎn)左右就慢慢恢復(fù)。

感覺就像每天10點(diǎn)在做活動(dòng),導(dǎo)致流量超過了系統(tǒng)瓶頸,進(jìn)而暴露出問題。而11:40之后,流量慢慢下降,系統(tǒng)才慢慢恢復(fù)。難道LVS這點(diǎn)量都撐不住?才550TPS啊?就崩潰了?

難道是網(wǎng)絡(luò)問題?

難道就是傳說中的網(wǎng)絡(luò)問題?看了下監(jiān)控,流量確實(shí)增加,不過只占了將近1/8的帶寬,離打爆網(wǎng)絡(luò)還遠(yuǎn)著呢。

進(jìn)行抓包

不管三七二十一,先抓包吧!

抓包結(jié)果

在這里筆者給出一個(gè)典型的抓包結(jié)果:

序號(hào) 時(shí)間 源地址 目的地址 源端口號(hào) 目的端口號(hào) 信息
1 09:57:30.60 30.1.1.1 20.1.1.1 443 33735 [FIN,ACK]Seq=507,Ack=2195,TSval=1164446830
2 09:57:30.64 20.1.1.1 30.1.1.1 33735 443 [FIN,ACK]Seq=2195,Ack=508,TSval=2149756058
3 09:57:30.64 30.1.1.1 20.1.1.1 443 33735 [ACK]Seq=508,Ack=2196,TSval=1164446863
4 09:59:22.06 20.1.1.1 30.1.1.1 33735 443 [SYN]Seq=0,TSVal=21495149222
5 09:59:22.06 30.1.1.1 20.1.1.1 443 33735 [ACK]Seq=1,Ack=1487349876,TSval=1164558280
6 09:59:22.08 20.1.1.1 30.1.1.1 33735 443 [RST]Seq=1487349876

上面抓包結(jié)果如下圖所示,一開始33735->443這個(gè)Socket四次揮手。在將近兩分鐘后又使用了同一個(gè)33735端口和443建立連接,443給33735回了一個(gè)莫名其妙的Ack,導(dǎo)致33735發(fā)了RST!

現(xiàn)象是怎么產(chǎn)生的?

首先最可疑的是為什么發(fā)送了一個(gè)莫名其妙的Ack回來?筆者想到,這個(gè)Ack是WireShark給我計(jì)算出來的。為了我們方便,WireShark會(huì)根據(jù)Seq=0而調(diào)整Ack的值。事實(shí)上,真正的Seq是個(gè)隨機(jī)數(shù)!有沒有可能是WireShark在某些情況下計(jì)算錯(cuò)誤?
還是看看最原始的未經(jīng)過加工的數(shù)據(jù)吧,于是筆者將wireshark的

Relative sequence numbers

給取消了。取消后的抓包結(jié)果立馬就有意思了!調(diào)整過后抓包結(jié)果如下所示:

序號(hào) 時(shí)間 源地址 目的地址 源端口號(hào) 目的端口號(hào) 信息
1 09:57:30.60 30.1.1.1 20.1.1.1 443 33735 [FIN,ACK]Seq=909296387,Ack=1556577962,TSval=1164446830
2 09:57:30.64 20.1.1.1 30.1.1.1 33735 443 [FIN,ACK]Seq=1556577962,Ack=909296388,TSval=2149756058
3 09:57:30.64 30.1.1.1 20.1.1.1 443 33735 [ACK]Seq=909296388,Ack=1556577963,TSval=1164446863
4 09:59:22.06 20.1.1.1 30.1.1.1 33735 443 [SYN]Seq=69228087,TSVal=21495149222
5 09:59:22.06 30.1.1.1 20.1.1.1 443 33735 [ACK]Seq=909296388,Ack=1556577963,TSval=1164558280
6 09:59:22.08 20.1.1.1 30.1.1.1 33735 443 [RST]Seq=1556577963

看表中,四次揮手里面的Seq和Ack對(duì)應(yīng)的值和三次回收中那個(gè)錯(cuò)誤的ACK完全一致!也就是說,四次回收后,五元組并沒有消失,而是在111.5s內(nèi)還存活著!按照TCPIP狀態(tài)轉(zhuǎn)移圖,只有TIME_WAIT狀態(tài)才會(huì)如此。

我們可以看看Linux關(guān)于TIME_WAIT處理的內(nèi)核源碼:

    switch (tcp_timewait_state_process(inet_twsk(sk), skb, th)) {
// 如果是TCP_TW_SYN,那么允許此SYN分節(jié)重建連接
// 即允許TIM_WAIT狀態(tài)躍遷到SYN_RECV
case TCP_TW_SYN: {
struct sock *sk2 = inet_lookup_listener(dev_net(skb->dev),
&tcp_hashinfo,
iph->saddr, th->source,
iph->daddr, th->dest,
inet_iif(skb));
if (sk2) {
inet_twsk_deschedule(inet_twsk(sk), &tcp_death_row);
inet_twsk_put(inet_twsk(sk));
sk = sk2;
goto process;
}
/* Fall through to ACK */
}
// 如果是TCP_TW_ACK,那么,返回記憶中的ACK,這和我們的現(xiàn)象一致
case TCP_TW_ACK:
tcp_v4_timewait_ack(sk, skb);
break;
// 如果是TCP_TW_RST直接發(fā)送RESET包
case TCP_TW_RST:
tcp_v4_send_reset(sk, skb);
inet_twsk_deschedule(inet_twsk(sk), &tcp_death_row);
inet_twsk_put(inet_twsk(sk));
goto discard_it;
// 如果是TCP_TW_SUCCESS則直接丟棄此包,不做任何響應(yīng)
case TCP_TW_SUCCESS:;
}
goto discard_it;

上面的代碼有兩個(gè)分支,值得我們注意,一個(gè)是TCP_TW_ACK,在這個(gè)分支下,返回TIME_WAIT記憶中的ACK和我們的抓包現(xiàn)象一模一樣。還有一個(gè)TCP_TW_SYN,它表明了在
TIME_WAIT狀態(tài)下,可以立馬重用此五元組,跳過2MSL而達(dá)到SYN_RECV狀態(tài)!
狀態(tài)的遷移就在于tcp_timewait_state_process這個(gè)函數(shù),我們著重看下想要觀察的分支:

enum tcp_tw_status
tcp_timewait_state_process(struct inet_timewait_sock *tw, struct sk_buff *skb,
const struct tcphdr *th)
{
bool paws_reject = false;
......
paws_reject = tcp_paws_reject(&tmp_opt, th->rst);
if (!paws_reject &&
(TCP_SKB_CB(skb)->seq == tcptw->tw_rcv_nxt &&
(TCP_SKB_CB(skb)->seq == TCP_SKB_CB(skb)->end_seq || th->rst))) {
......
// 重復(fù)的ACK,discard此包
return TCP_TW_SUCCESS;
}
// 如果是SYN分節(jié),而且通過了paws校驗(yàn)
if (th->syn && !th->rst && !th->ack && !paws_reject &&
(after(TCP_SKB_CB(skb)->seq, tcptw->tw_rcv_nxt) ||
(tmp_opt.saw_tstamp &&
(s32)(tcptw->tw_ts_recent - tmp_opt.rcv_tsval) < 0))) {
......
// 返回TCP_TW_SYN,允許重用TIME_WAIT五元組重新建立連接
return TCP_TW_SYN;
}
// 如果沒有通過paws校驗(yàn),則增加統(tǒng)計(jì)參數(shù)
if (paws_reject)
NET_INC_STATS_BH(twsk_net(tw), LINUX_MIB_PAWSESTABREJECTED);
if (!th->rst) {
// 如果沒有通過paws校驗(yàn),而且這個(gè)分節(jié)包含ack,則將TIMEWAIT持續(xù)時(shí)間重新延長(zhǎng)
// 我們抓包結(jié)果的結(jié)果沒有ACK,只有SYN,所以并不會(huì)延長(zhǎng)
if (paws_reject || th->ack)
inet_twsk_schedule(tw, &tcp_death_row, TCP_TIMEWAIT_LEN,
TCP_TIMEWAIT_LEN);
// 返回TCP_TW_ACK,也即TCP重傳ACK到對(duì)面
return TCP_TW_ACK;
}
}

根據(jù)上面源碼,PAWS(Protect Againest Wrapped Sequence numbers防止回繞)校驗(yàn)機(jī)制如果生效而拒絕此分節(jié)的話,LINUX_MIB_PAWSESTABREJECTED這個(gè)統(tǒng)計(jì)參數(shù)會(huì)增加,對(duì)應(yīng)于Linux中的命令即是:

netstat -s | grep reject
216576 packets rejects in established connections because of timestamp

這么上去后端的Nginx一統(tǒng)計(jì),果然有大量的報(bào)錯(cuò)。而且根據(jù)筆者的觀察,這個(gè)統(tǒng)計(jì)參數(shù)急速增加的時(shí)間段就是出問題的時(shí)間段,也就是每天早上10:00-12:00左右。每次大概會(huì)增加1W多個(gè)統(tǒng)計(jì)參數(shù)。
那么什么時(shí)候PAWS會(huì)不通過呢,我們直接看下tcp_paws_reject的源碼吧:

static inline int tcp_paws_reject(const struct tcp_options_received *rx_opt,
int rst)
{
if (tcp_paws_check(rx_opt, 0))
return 0;
// 如果是rst,則放松要求,60s沒有收到對(duì)端報(bào)文,認(rèn)為PAWS檢測(cè)通過
if (rst && get_seconds() >= rx_opt->ts_recent_stamp + TCP_PAWS_MSL)
return 0;
return 1;
}

static inline int tcp_paws_check(const struct tcp_options_received *rx_opt,
int paws_win)
{

// 如果ts_recent中記錄的上次報(bào)文(SYN)的時(shí)間戳,小于當(dāng)前報(bào)文的時(shí)間戳(TSval),表明paws檢測(cè)通過
// paws_win = 0
if ((s32)(rx_opt->ts_recent - rx_opt->rcv_tsval) <= paws_win)
return 1;
// 否則,上一次獲得ts_recent時(shí)間戳的時(shí)刻的24天之后,為真表明已經(jīng)有超過24天沒有接收到對(duì)端的報(bào)文了,認(rèn)為PAWS檢測(cè)通過
if (unlikely(get_seconds() >= rx_opt->ts_recent_stamp + TCP_PAWS_24DAYS))
return 1;

return 0;
}

在抓包的過程中,我們明顯發(fā)現(xiàn),在四次揮手時(shí)候,記錄的tsval是2149756058,而下一次syn三次握手的時(shí)候是21495149222,反而比之前的小了!

序號(hào) 時(shí)間 源地址 目的地址 源端口號(hào) 目的端口號(hào) 信息
2 09:57:30.64 20.1.1.1 30.1.1.1 33735 443 [FIN,ACK]TSval=2149756058
4 09:59:22.06 20.1.1.1 30.1.1.1 33735 443 [SYN]TSVal=21495149222

所以PAWS校驗(yàn)不過。
那么為什么會(huì)這個(gè)SYN時(shí)間戳比之前揮手的時(shí)間戳還小呢?那當(dāng)然是NAT的鍋嘍,NAT把多臺(tái)機(jī)器的ip虛擬成同一個(gè)ip。但是多臺(tái)機(jī)器的時(shí)間戳(也即從啟動(dòng)開始到現(xiàn)在的時(shí)間,非墻上時(shí)間),如下圖所示:

但是還有一個(gè)疑問,筆者記得TIME_WAIT也即2MSL在Linux的代碼里面是定義為了60s。為何抓包的結(jié)果卻存活了將近2分鐘之久呢?

TIME_WAIT的持續(xù)時(shí)間

于是筆者開始閱讀關(guān)于TIME_WAIT定時(shí)器的源碼,具體可見筆者的另一篇博客:

從Linux源碼看TIME_WAIT狀態(tài)的持續(xù)時(shí)間
https://my.oschina.net/alchemystar/blog/4690516

結(jié)論如下

在TIME_WAIT很多的狀態(tài)下,TIME_WAIT能夠存活112.5s,將近兩分鐘的時(shí)間,和我們的抓包結(jié)果一致。
當(dāng)然了,這個(gè)計(jì)算只是針對(duì)Linux 2.6和3.10內(nèi)核而言,而對(duì)紅帽維護(hù)的3.10.1127內(nèi)核版本則會(huì)有另外的變化,這個(gè)變化導(dǎo)致了一個(gè)令筆者感到非常奇異的現(xiàn)象,這個(gè)在后面會(huì)提到。

問題發(fā)生條件

如上面所解釋,只有在Server端TIME_WAIT還沒有消失時(shí)候,重用這個(gè)Socket的時(shí)候,遇上了反序的時(shí)間戳SYN,就會(huì)發(fā)生這種問題。由于NAT前面的所有機(jī)器時(shí)間戳都不相同,所以有很大概率會(huì)導(dǎo)致時(shí)間戳反序!

那么什么時(shí)候重用TIME_WAIT狀態(tài)的Socket呢

筆者知道,防火墻的端口號(hào)選擇邏輯是RoundRobin的,也即從2048開始一直增長(zhǎng)到65535,再回繞到2048,如下圖所示:

為什么壓測(cè)的時(shí)候不出現(xiàn)問題

但我們?cè)诰€下壓測(cè)的時(shí)候,明顯速率遠(yuǎn)超560tps,那為何沒有這樣的問題出現(xiàn)呢。很簡(jiǎn)單,是因?yàn)?/span>
TCP_SYN_SUCCESS這個(gè)分支,由于我們的壓測(cè)機(jī)沒有過NAT,那么時(shí)間戳始終保持單IP下的單調(diào)遞增,即便>560TPS之后,走的也是TCP_SYN_SUCCESS,將TIME_WAIT Socket重用為SYN_RECV,自然不會(huì)出現(xiàn)這樣的問題,如下圖所示:

如何解釋LVS的監(jiān)控曲線?

等等,564TPS?這個(gè)和LVS陡然下跌的TPS基本相同!難道在端口號(hào)復(fù)用之后LVS就不會(huì)新建連接(其實(shí)是LVS中的session表項(xiàng))?從而導(dǎo)致統(tǒng)計(jì)參數(shù)并不增加?
于是筆者直接去擼了一下LVS的源碼:

tcp_conn_schedule
|->ip_vs_schedule
/* 如果新建conn表項(xiàng)成功,則對(duì)已有連接數(shù)++ */
|->ip_vs_conn_stats
而在我們的入口函數(shù)ip\_vs\_in中
static unsigned int
ip_vs_in(unsigned int hooknum, struct sk_buff *skb,
const struct net_device *in, const struct net_device *out,
int (*okfn) (struct sk_buff *))
{
......
// 如果能找到對(duì)應(yīng)的五元組
cp = pp->conn_in_get(af, skb, pp, &iph, iph.len, 0, &res_dir);

if (likely(cp)) {
/* For full-nat/local-client packets, it could be a response */
if (res_dir == IP_VS_CIDX_F_IN2OUT) {
return handle_response(af, skb, pp, cp, iph.len);
}
} else {
/* create a new connection */
int v;
// 找不到對(duì)應(yīng)的五元組,則新建連接,同時(shí)conn++
if (!pp->conn_schedule(af, skb, pp, &v, &cp))
return v;
}
......
}

很明顯的,如果當(dāng)前五元組表項(xiàng)存在,則直接復(fù)用表項(xiàng),而不存在,才創(chuàng)建新的表項(xiàng),同時(shí)conn++。而表項(xiàng)需要在LVS的Fintimeout時(shí)間超過后才消失(在筆者的環(huán)境里面是120s)。這樣,在端口號(hào)復(fù)用的時(shí)候,因?yàn)?lt;112.5s,所以LVS會(huì)直接復(fù)用表項(xiàng),而統(tǒng)計(jì)參數(shù)不會(huì)有任何變化,從而導(dǎo)致了下面這個(gè)曲線。

當(dāng)流量慢慢變小,無法達(dá)到重用端口號(hào)的條件的時(shí)候,曲線又會(huì)垂直上升。和筆者的推測(cè)一致。也就是說在五元組固定四元的情況下>529tps(63487/120)的時(shí)候,在此固定業(yè)務(wù)下的新建連接數(shù)不會(huì)增加。

而圖中僅存的560-529=>21+個(gè)連接創(chuàng)建,是由另一個(gè)業(yè)務(wù)的vip引起,在這個(gè)vip上,由于量很小,沒有端口復(fù)用。但是LVS統(tǒng)計(jì)的是總數(shù)量,所以在端口號(hào)開始復(fù)用之后,始終會(huì)有少量的新建連接存在。

值得注意的是,端口號(hào)復(fù)用之后,LVS轉(zhuǎn)發(fā)的時(shí)候就會(huì)直接使用這個(gè)映射表項(xiàng),所以相同的五元組到LVS后會(huì)轉(zhuǎn)發(fā)給相同的Nginx,而不會(huì)進(jìn)行WRR(Weight Round Robin)負(fù)載均衡,表現(xiàn)出了一定的”親和性”。如下圖所示:

NAT下固定ip地址對(duì)的性能瓶頸

好了,現(xiàn)在可以下結(jié)論了。在ip源和目的地址固定,目的端口號(hào)也固定的情況下,五元組的可變量只有ip源端口號(hào)了。而源端口號(hào)最多是65535個(gè),如果計(jì)算保留端口號(hào)(0-2048)的話(假設(shè)防火墻保留2048個(gè)),那么最多可使用63487個(gè)端口。
由于每使用一個(gè)端口號(hào),在高負(fù)載的情況下,都會(huì)產(chǎn)生一個(gè)112.5s才消失的TIME_WAIT。那么在63487/112.5也就是564TPS(使用短連接)的情況下,就會(huì)復(fù)用TIME_WAIT下的Socket。再加上PAWS校驗(yàn),就會(huì)造成大量的連接創(chuàng)建異常!
這個(gè)論斷和筆者觀察到的應(yīng)用報(bào)錯(cuò)以及LVS監(jiān)控曲線一致。

LVS曲線異常事件和報(bào)錯(cuò)時(shí)間接近

因?yàn)長(zhǎng)VS是在529TPS時(shí)候開始垂直下降,而端口號(hào)復(fù)用是在564TPS的時(shí)候開始,兩者所需TPS非常接近,所以一般LVS出現(xiàn)曲線異常的時(shí)候,基本就是開始報(bào)錯(cuò)的時(shí)候!但是LVS曲線異常只能表明復(fù)用表項(xiàng),并不能表明一定有問題,因?yàn)榭梢酝ㄟ^調(diào)節(jié)某些內(nèi)核參數(shù)使得在端口號(hào)復(fù)用的時(shí)候不報(bào)錯(cuò)!

在端口號(hào)復(fù)用情況下,lvs本身的新建連接數(shù)無法代表真實(shí)TPS。

嘗試修復(fù)

設(shè)置tcp_tw_max_bucket

首先,筆者嘗試限制Nginx所在Linux中最大TIME_WAIT數(shù)量

echo '5000'  > /proc/sys/net/ipv4/tcp_tw_max_bucket

這基于一個(gè)很簡(jiǎn)單的想法,TIME_WAIT狀態(tài)越少,那么命中TIME_WAIT狀態(tài)Socket的概率肯定越小。設(shè)置了之后,確實(shí)報(bào)錯(cuò)量確實(shí)減少了好多。但由于TPS超越極限之后端口號(hào)不停的回繞,導(dǎo)致還是一直在報(bào)錯(cuò),不會(huì)有根本性好轉(zhuǎn)。

如果將tcp_tw_max_bucket設(shè)置為0,那么按理論上來說不會(huì)出問題了。
但是無疑將TCP精心設(shè)計(jì)的TIME_WAIT這個(gè)狀態(tài)給廢棄了,筆者覺得這樣做過于冒險(xiǎn),于是沒有進(jìn)行嘗試。

嘗試擴(kuò)展源地址

這個(gè)問題本質(zhì)是由于五元組在限定了4元,只有源端口號(hào)可變的情況下,端口號(hào)只有
2048-65535可用。那么我們放開源地址的限定,例如將源IP增加到3個(gè),無疑可以將TPS擴(kuò)大三倍。

同理,將目的地址給擴(kuò)容,也能達(dá)到類似的效果。
但據(jù)網(wǎng)工反映,合作方通過他們的防火墻出來之后就只有一個(gè)IP,而一個(gè)IP在我們的防火墻上并不能映射成多個(gè)IP,多以在不變更它們網(wǎng)絡(luò)設(shè)置的情況下無法擴(kuò)展源地址。而擴(kuò)容目的地址,也需要對(duì)合作方網(wǎng)絡(luò)設(shè)置進(jìn)行修改。本著不讓合作方改動(dòng)的服務(wù)精神,筆者開始嘗試其它方案。

擴(kuò)容Nginx?沒效果

在一開始筆者沒有搞明白LVS那個(gè)詭異的曲線的時(shí)候,筆者并不知道在端口復(fù)用的情況下,LVS會(huì)表現(xiàn)出”親和性”。于是想著,如果擴(kuò)容Nginx后,根據(jù)負(fù)載均衡原則,正好落到有這個(gè)TIME_WAIT五元組的概率會(huì)降低,所以嘗試著另擴(kuò)容了一倍的Nginx。但由于之前所說的LVS在端口號(hào)復(fù)用下的親和性,反而加大了TIME_WAIT段!

擴(kuò)容Nginx的奇異現(xiàn)象

在筆者想明白LVS的”親和性”之后,對(duì)擴(kuò)容Nginx會(huì)導(dǎo)致更多的報(bào)錯(cuò)已經(jīng)有了心理預(yù)期,不過被現(xiàn)實(shí)啪啪啪打臉!報(bào)錯(cuò)量和之前基本一樣。更奇怪的是,筆者發(fā)現(xiàn)非活躍連接數(shù)監(jiān)控(即非ESTABLISHED)狀態(tài),會(huì)在端口號(hào)復(fù)用之后,呈現(xiàn)出一種負(fù)載不均衡的現(xiàn)象,如下圖所示。

筆者上去新擴(kuò)容的Nginx看了一下,發(fā)現(xiàn)新Nginx只有很少量的由于PAWS引起的報(bào)錯(cuò),增長(zhǎng)速率很慢,基本1個(gè)小時(shí)只有100多。而舊Nginx一個(gè)小時(shí)就有1W多!
那么按照這個(gè)錯(cuò)誤比例分布,就很好理解為什么形成這樣的曲線了。因?yàn)長(zhǎng)VS的親和性,在端口號(hào)復(fù)用時(shí)刻,落到舊Nginx上會(huì)大概率失敗,從而在Fintimeout到期后,重新選擇一個(gè)負(fù)載均衡的時(shí)候,如果落到新Nginx上,按照統(tǒng)計(jì)參數(shù)來看基本都會(huì)成功,但如果還是落到舊Nginx上則基本還會(huì)失敗,如此往復(fù)。就天然的形成了一個(gè)優(yōu)先選擇的過程,從而造成了這個(gè)曲線。

當(dāng)然實(shí)際的過程會(huì)比這個(gè)復(fù)雜一點(diǎn),多一些步驟,但大體是這個(gè)思路。
而在端口復(fù)用結(jié)束后,不管落到哪個(gè)Nginx上都會(huì)成功,所以負(fù)載均衡又會(huì)慢慢趨于均衡。

為什么新擴(kuò)容的Nginx表現(xiàn)異常優(yōu)異呢?

新擴(kuò)容的Nginx表現(xiàn)異常優(yōu)異,在這個(gè)TPS下沒有問題,那到底是為什么呢?筆者想了一天都沒想明白。睡了一覺之后,對(duì)比了兩者的內(nèi)核參數(shù),突然豁然開朗。原來新擴(kuò)容的Nginx所在的內(nèi)核版本變了,變成了3.10!
筆者連忙對(duì)比起了原來的2.6內(nèi)核和3.10的內(nèi)核版本變化,但毫無所得。。。思維
陷入了停滯

Linux官方3.10和紅帽的3.10.1127分支差異

等等,我們線上的內(nèi)核版本是3.10.1127,并不是官方的內(nèi)核,難道代碼有所不同?于是筆者立馬下載了3.10.1127的源碼。這一比對(duì),終于讓筆者找到了原因所在,看如下代碼!

void inet_twdr_twkill_work(struct work_struct *work)
{
struct inet_timewait_death_row *twdr =
container_of(work, struct inet_timewait_death_row, twkill_work);
bool rearm_timer = false;
int i;

BUILD_BUG_ON((INET_TWDR_TWKILL_SLOTS - 1) >
(sizeof(twdr->thread_slots) * 8));

while (twdr->thread_slots) {
spin_lock_bh(&twdr->death_lock);
for (i = 0; i < INET_TWDR_TWKILL_SLOTS; i++) {
if (!(twdr->thread_slots & (1 << i)))
continue;

while (inet_twdr_do_twkill_work(twdr, i) != 0) {
// 如果這次沒處理完,將rearm_timer設(shè)置為true
rearm_timer = true;
if (need_resched()) {
spin_unlock_bh(&twdr->death_lock);
schedule();
spin_lock_bh(&twdr->death_lock);
}
}

twdr->thread_slots &= ~(1 << i);
}
spin_unlock_bh(&twdr->death_lock);
}
// 在這邊多了一個(gè)rearm_timer,并將定時(shí)器設(shè)置為1s之后
// 這樣,原來需要額外等待的7.5s現(xiàn)在收斂為額外等待1s
if (rearm_timer)
mod_timer(&twdr->tw_timer, jiffies + HZ);
}

如代碼所示,3.10.1127對(duì)TIME_WAIT的時(shí)間輪處理做了加速,讓原來需要額外等待的7.5s收斂為額外等待的1s。經(jīng)過校正后的時(shí)間輪如下所示:

那么TIME_WAIT的存活時(shí)間就從112.5s下降到60.5s(計(jì)算公式8.5*7+1)。
那么,在這個(gè)狀態(tài)下,我們的端口復(fù)用臨界TPS就達(dá)到了(65535-2048)/60.5=1049tps,由于線上業(yè)務(wù)量并沒有達(dá)到這一tps。所以對(duì)于新擴(kuò)容的Nginx,并不會(huì)造成TIME_WAIT下的端口復(fù)用。所以錯(cuò)誤量并沒有變多!當(dāng)然,由于舊Nginx的存在,錯(cuò)誤量也沒有變少。
但是,由于那個(gè)神奇的選擇性負(fù)載均衡的存在,在端口復(fù)用時(shí)間越長(zhǎng),每秒鐘的報(bào)錯(cuò)量會(huì)越少!直到LVS的表項(xiàng)全部指到新Nginx集群,就不會(huì)再有報(bào)錯(cuò)了!

TPS漲到1049tps依舊會(huì)報(bào)錯(cuò)

當(dāng)然了,根據(jù)上面的計(jì)算,在TPS繼續(xù)上漲到1049后,依舊會(huì)產(chǎn)生錯(cuò)誤。新版本內(nèi)核只不過拉高了臨界值,所以筆者還是要尋求更加徹底的解決方案。

順便吐槽一句

Linux TCP的實(shí)現(xiàn)對(duì)TIME_WAIT的處理用時(shí)間輪在筆者看來并不是什么高明的處理方式。
Linux本身對(duì)于Timer的處理本身就提供了紅黑樹這樣的方案。放著這樣好的方案不用,偏偏去實(shí)現(xiàn)一個(gè)精度不高還很復(fù)雜的時(shí)間輪。
所幸在Linux 4.x版本中,擯棄了時(shí)間輪,直接使用Linux本身的紅黑樹方案。感覺自然多了!

關(guān)閉tcp_timestamps

筆者一開始并不想修改這個(gè)參數(shù),因?yàn)樾薷囊馕吨P(guān)閉PAWS校驗(yàn)。要是真有個(gè)什么亂序包之類,就少了一層防御手段。但是事到如今,為了不讓合作方修改,只能改這個(gè)參數(shù)了。不過由于是我們是專線!所以風(fēng)險(xiǎn)可控。

echo '0' > /proc/sys/net/ipv4/tcp_timestamps

運(yùn)行至今,業(yè)務(wù)上反饋良好。終于,這個(gè)問題終于被解決了!!!!!!
補(bǔ)充一句,關(guān)閉tcp_timestamps只是筆者在種種限制下所做的選擇,更好的方案應(yīng)該是擴(kuò)充源或者目的地址。

總結(jié)

解決這個(gè)問題真的是一波三折。在問題解決過程中,從LVS源碼看到Linux 2.6內(nèi)核對(duì)TIME_WAIT狀態(tài)的處理,再到3.10內(nèi)核和3.10.1127內(nèi)核之間的細(xì)微區(qū)別。
為了解釋所有的疑點(diǎn),筆者始終在找尋著各種蛛絲馬跡。雖然不追尋這些,問題依舊大概率能夠通過各種嘗試得到解決。但是,那些奇怪的曲線始終縈繞在筆者心頭,讓筆者日思夜想。然后,突然靈光乍現(xiàn),找到線索后頓悟的那種感覺實(shí)在是太棒了!這也是筆者解決復(fù)雜問題源源不斷的動(dòng)力!

 


 

推薦閱讀


【1】 12. 如何基于Cortex-A9的UART 詳解   必讀
【2】網(wǎng)絡(luò)/命令行抓包工具tcpdump詳解 必讀
【3】 13.一文搞懂Cortex-A9 RTC  必讀
【4】 DNS 原理入門指南
【5】 14. 從0學(xué)ARM Cortex-A9 看門狗入門

 


 

進(jìn)群,請(qǐng)加一口君個(gè)人微信,帶你嵌入式入門進(jìn)階。


在公眾號(hào)內(nèi)回復(fù)「1024」,即可免費(fèi)獲取學(xué)習(xí)資料,期待你的關(guān)注~

一口Linux 寫點(diǎn)代碼,寫點(diǎn)人生!
評(píng)論
  • 在物聯(lián)網(wǎng)從“萬(wàn)物互聯(lián)”邁向“萬(wàn)物智聯(lián)”的進(jìn)程中,LTE Cat.1憑借其在速率、成本與網(wǎng)絡(luò)覆蓋之間的完美平衡,正成為中低速物聯(lián)網(wǎng)市場(chǎng)的絕對(duì)主力。隨著2G/3G網(wǎng)絡(luò)的逐步退網(wǎng)以及新國(guó)標(biāo)對(duì)終端設(shè)備智能化、定位功能的強(qiáng)制要求,Cat.1模組迎來了爆發(fā)式的增長(zhǎng)窗口。在這一關(guān)鍵節(jié)點(diǎn),基于華為海思Hi2131芯片設(shè)計(jì)的LTE Cat.1模組,憑借其在能效、射頻、架構(gòu)及物理規(guī)格上的底層創(chuàng)新,成功打破了“高性能必高功耗”的傳統(tǒng)魔咒,為行業(yè)提供了極具競(jìng)爭(zhēng)力的連接最優(yōu)解。核心技術(shù)優(yōu)勢(shì):重塑Cat.1能效與連接標(biāo)桿海
    用戶1778981989717 2026-08-05 21:04 148瀏覽
  •        很多人只見過封裝在SMD外殼里的小尺寸晶振,卻不知道一顆2016、1612甚至1210封裝的微型石英晶振,從一塊巴掌大的石英原礦,到最終能穩(wěn)定起振的成品,要經(jīng)過十幾道精密工序。它內(nèi)部的石英晶片厚度最薄不到20微米,比普通A4紙的1/5還薄,整個(gè)生產(chǎn)過程里哪怕0.1微米的誤差,都會(huì)直接廢掉整批產(chǎn)品,這也是小尺寸晶振過去長(zhǎng)期依賴進(jìn)口,國(guó)內(nèi)廠商花了十幾年才啃下量產(chǎn)硬骨頭的核心原因。1. 原石定向切割:0.01度的角度誤差都不能有小尺寸晶振的第一步,
    TKD泰晶科技 2026-08-07 08:43 259瀏覽
  • 在前六期中,我們已經(jīng)分別討論了 CRA 的適用范圍、整體影響、漏洞通報(bào)義務(wù)、風(fēng)險(xiǎn)評(píng)估與技術(shù)文檔證據(jù)鏈、第三方組件與 SBOM 供應(yīng)鏈治理,以及產(chǎn)品上市后的支持期、安全更新、用戶說明和終止支持管理。到這里,企業(yè)已經(jīng)能夠回答幾個(gè)核心問題:產(chǎn)品是否落入 CRA 適用范圍,產(chǎn)品由哪些組件構(gòu)成,企業(yè)如何證明自己在設(shè)計(jì)、開發(fā)和上市前采取了必要的安全措施,以及產(chǎn)品上市后如何持續(xù)維護(hù)和安全下線。但對(duì)于真正準(zhǔn)備落地 CRA 合規(guī)的企業(yè)來說,還有一個(gè)更現(xiàn)實(shí)的問題:CRA 的法規(guī)條文相對(duì)原則化,企業(yè)應(yīng)當(dāng)如何把“網(wǎng)絡(luò)安
    虹科云科技 2026-08-03 16:51 94876瀏覽
  • 文:杜杰編輯:侯煜當(dāng)?shù)貢r(shí)間7月28日,美國(guó)特朗普政府落地最新科技封鎖政策,美國(guó)聯(lián)邦通信委員會(huì)(FCC)正式更新《受管制清單》,新增兩大類設(shè)備——境外生產(chǎn)的先進(jìn)機(jī)器人設(shè)備、境外生產(chǎn)的聯(lián)網(wǎng)電力逆變器。FCC在官方情況說明書中明確,該類境外制造產(chǎn)品,“會(huì)對(duì)美國(guó)國(guó)家安全或美國(guó)民眾的人身安全構(gòu)成無法承受的風(fēng)險(xiǎn)”。本次新規(guī)設(shè)置明確豁免機(jī)制:經(jīng)美國(guó)國(guó)防部(DoW)、電力逆變器品類經(jīng)美國(guó)國(guó)土安全部(DHS)審核并授予“有條件批準(zhǔn)”,認(rèn)定對(duì)應(yīng)設(shè)備品類不存在重大安全風(fēng)險(xiǎn),即可獲得準(zhǔn)入豁免。同時(shí)政策嚴(yán)格執(zhí)行新老劃斷原
    華爾街科技眼 2026-08-03 21:28 307瀏覽
  • 在EMC測(cè)試過程中,傳導(dǎo)發(fā)射(Conducted Emission,CE)超標(biāo)是工程師最常遇到的問題之一。更令人頭疼的是,同樣的超標(biāo)曲線背后,可能對(duì)應(yīng)著完全不同的干擾機(jī)理:有的是差模噪聲沿電源回路傳播,有的是共模電流通過寄生路徑耦合,還有些問題甚至并非來自電源本身,而是負(fù)載、電纜布局或接地結(jié)構(gòu)引起的連鎖反應(yīng)。 · 150kHz~1MHz 超標(biāo):多為差模噪聲為主,干擾沿火線-零線回路傳輸。 · 1MHz~30MHz 超標(biāo):通常共模噪聲占主導(dǎo),干擾通過火線/零線對(duì)地回路傳播。 如果條件允許,用電流探
    譽(yù)磁電磁兼容EMC 2026-07-31 18:45 482瀏覽
  • 做藍(lán)牙音箱的工程師大概都碰過這個(gè)局面。產(chǎn)品要連手機(jī)放歌,要本地播開機(jī)提示音和按鍵音,還要接 App 做配網(wǎng)和狀態(tài)上報(bào)。三件事拆開,早先的常規(guī)做法是音頻藍(lán)牙一顆料、數(shù)傳藍(lán)牙一顆料、本地播放再掛一顆小 MCU 加一片 Flash。板子越畫越大,BOM 越算越貴,待機(jī)電流和固件工作量也跟著漲。WT2605C 出來以后,這套需求可以集成到一顆芯片,就是 WT2605C-32N,該芯片采用QFN32 封裝,4×4 毫米,把音頻藍(lán)牙、BLE 數(shù)傳和 MP3 本地播放三樣全包了。對(duì)藍(lán)牙音箱來說,最實(shí)在的好處就
    唯創(chuàng)知音語(yǔ)音芯片 2026-08-06 15:14 195瀏覽
  • 摘要防爆自控系統(tǒng)同時(shí)布設(shè)本安信號(hào)、工業(yè)總線、動(dòng)力供電三類線路,僅依靠標(biāo)識(shí)標(biāo)牌管控插接極易出現(xiàn)人為錯(cuò)插問題,高壓動(dòng)力回路竄入本安弱電回路會(huì)突破安全柵限能標(biāo)準(zhǔn),產(chǎn)生點(diǎn)火風(fēng)險(xiǎn)。依托 A、D、K 標(biāo)準(zhǔn)化機(jī)械防呆編碼體系,搭配護(hù)套顏色區(qū)分管理,適配 3 針 3 孔免焊接冷壓增安型防爆航插、5PIN 總線防爆航空插頭、8 芯焊接防爆法蘭插座的選型使用,從物理結(jié)構(gòu)層面杜絕防爆接近開關(guān)連接器、防爆傳感器航插接頭混用插接問題,補(bǔ)齊防爆系統(tǒng)被動(dòng)安全防護(hù)體系。關(guān)鍵詞圓形防爆連接器,防呆編碼防爆航插,防爆航空插頭,防爆
    kyfbest科迎法電氣 2026-07-31 18:29 376瀏覽
  • ?摘要:低價(jià)大流量卡正全面退市,政策收緊已成定局。面對(duì)傳統(tǒng)號(hào)卡的不確定性,隨身WiFi憑借穩(wěn)定連接、多設(shè)備共享、獨(dú)立設(shè)備和靈活套餐等優(yōu)勢(shì),成為務(wù)實(shí)可靠的備選方案。1、流量卡黃金時(shí)代要結(jié)束了通信行業(yè)正迎來一場(chǎng)前所未有的“地震式”調(diào)整——曾讓無數(shù)用戶追捧的低價(jià)大流量卡,正在全速退出各大平臺(tái)。這早已不是一次普通的競(jìng)合,而是一場(chǎng)趨勢(shì)性的行業(yè)洗牌。回望過去,19元200G的神卡,那時(shí)真是“睡著都能笑醒”,便宜到不敢相信,爽到忍不住炫耀。那些日子,好像隨便刷、隨便看,流量自由觸手可及。可如今,回頭再看,那種
    愛上電路設(shè)計(jì) 2026-08-03 10:21 128809瀏覽
  •                                                                        
    廣州鐵金剛 2026-08-06 17:44 45549瀏覽
  • 產(chǎn)品使用18V供電,配套4串鋰離子電池,需要設(shè)計(jì)一個(gè)充電器。因?yàn)檩斎?8V,電池最高 16.8V,壓差僅 1.2V。因?yàn)閴翰钐 J褂瞄_關(guān)型的充電控制芯片不穩(wěn)定。嘗試自行設(shè)計(jì)一個(gè)。整體采用分立三極管 + TL431架構(gòu),分4個(gè)功能單元:使能控制回路、限流環(huán)路、TL431 精密恒壓反饋環(huán)路、PNP 功率管主功率輸出回路;實(shí)現(xiàn)完整鋰電池充電邏輯。使能控制回路按鍵按下:5V 電壓經(jīng) R12 (2kΩ) 送入 NPN 管 Q3 基極,Q3 飽和導(dǎo)通,對(duì)地拉低 R1、R2 組成的分壓控制節(jié)點(diǎn)電位;該節(jié)點(diǎn)直
    southcreek 2026-08-07 13:45 211瀏覽
  • 摘要在防爆電氣設(shè)計(jì)中,只參照芯數(shù)選型而忽略額定載流量,長(zhǎng)期滿負(fù)荷運(yùn)行會(huì)出現(xiàn)插頭發(fā)熱、接觸面氧化、IP67 密封受熱老化等問題。結(jié)合常用 3 針 3 孔、4 芯、5PIN、8PIN 圓形防爆連接器,制作分級(jí)電流參數(shù)對(duì)照表,區(qū)分冷壓免焊接、焊接兩種接線結(jié)構(gòu)的安全載流數(shù)值,設(shè)置合理電流冗余系數(shù),搭配使用環(huán)境修正參數(shù),規(guī)范防爆接近開關(guān)連接器、防爆法蘭插座的選型計(jì)算方式。關(guān)鍵詞圓形防爆連接器,載流參數(shù)表,防爆法蘭插座,防爆端子接頭,IP67 防爆防水接插件1 產(chǎn)品概述圓形防爆連接器觸點(diǎn)載流能力由插針直徑、
    kyfbest科迎法電氣 2026-08-03 09:18 128612瀏覽
  • 導(dǎo)語(yǔ)在現(xiàn)代高速數(shù)字電路設(shè)計(jì)中,信號(hào)的完整性已不僅是理想波形推演,而是一場(chǎng)與物理非理想特性正面博弈的工程實(shí)踐。濾波器芯片作為凈化傳輸鏈路的關(guān)鍵屏障,其核心挑戰(zhàn)在于:能否有效識(shí)別并濾除那些隱匿在電平跳變過程中的亞納秒級(jí)瞬態(tài)脈沖干擾,這類干擾持續(xù)極短,卻足以在高速鏈路中引發(fā)誤觸發(fā)。然而,傳統(tǒng)函數(shù)發(fā)生器受限于采樣率與邊沿速率,根本無法忠實(shí)復(fù)現(xiàn)如此狹窄且陡峭的異常波形。針對(duì)此困境,德思特TS-AWG7000系列任意波形發(fā)生器以17 GS/s采樣率與50 ps原生邊沿速度,為瞬態(tài)脈沖提供精細(xì)刻畫,配合SPG
    德思特測(cè)試測(cè)量 2026-08-05 14:06 5瀏覽
我要評(píng)論
0
點(diǎn)擊右上角,分享到朋友圈 我知道啦
請(qǐng)使用瀏覽器分享功能 我知道啦
主站蜘蛛池模板: 霍尔的移动城堡国语| 电视剧我在天堂等你| 咒术回战零剧场版免费观看| 冰路营救在线观看| 戏说台湾全集| 四方极爱电视剧免费观看高清| 道士下山免费完整版在线观看| 风流少年唐伯虎2| 电视剧猎毒人免费版在线观看 | 两世欢全集免费观看| 曾国祥身高| 老婆6免费完整高清电视剧| 神勇武工队传奇主题曲| 日本女人的真实生活| 《迷宫1997版》在线观看| 被拒绝的爱:无尽篇未删减| 美丽的小瘦子7| 火影忍者剧场版 忍者之路| 疯狂造假团| 日本“天降巨大火球”闪诡异绿光| 长月无烬免费观看完整版| 《XL司令》动漫第一季动漫 | 人渣的本愿| 哈利波特电影免费观看| 择君记电视剧在线观看完整版免费| 《农场主的三个女儿》| 机器侠电影| 远亲小姐在线观看| 爱我几何免费| 马龙结了三次婚| ed2k苍| 3对1在线观看中文字幕| 魔胎2阴灵怪兽| 年轻的母亲手机在线观看| 生活中的玛丽在线伦理| 小东西逃跑是要受到惩罚的| 杨靖宇的历史故事| 女性3对1:三人一次性体检电影| 迈阿密风云电影| 私藏浪漫电视剧在线播放免费观看| 再回首歌曲原唱| 梅德韦杰娃| 刑警的日子电视剧免费观看全集| 春节起源于什么时期| 只是结婚全集免费观看| 维修工的艳遇 中字| 法国监狱2在线观看完整版高清| 心理心里有个谜粤语| 遭遇义子的侵犯日剧中文| 终结的后宫| 西行纪第三季在线观看| 尖叫之夜免费直播| 长相思第二部免费| 女版斯巴达成HR版| 杜拉拉之似水年华| 高清《失窃的女孩》电视剧| 牙医姐妹电影观看免费完整版| 严家有女不愁嫁全集| 十八岁的小妹叫29岁叫什么| 《炸天小姐》完整版| 爱情公寓5分集剧情| 情欲报复| 杨敏思1-5集免费观看第7集更新时间| 和空姐一起的日子剧情| 胜利事件牵扯明星| 站着再来一次48集分集剧情介绍 | 海贼王剧场版第10弹| xl司令动漫第一季全集无马赛克 | 爱的罗曼史无删减在线观看| 兄弟老婆3全集免费观看| 禁止的爱善良的小姨子免费观看| 怒水西流 电影| 《禁忌5》HD中字保罗| 韩国队提前庆祝被中国台北绝杀 | 敢死队电影| 我的波塞冬| 欢乐颂5最新免费观看高清电视剧| 花垣县| 澳门风云电影国语| 乡村小老板:致富带全村全集免费| 我的游泳女教练3季中文版 | 角都是哪个村的| 地心历险记2 720P| 职场晋升的妻子职场2剧情| 《正义女神》| 《调教女仆》电影| 《女超人》麦乐迪版观看网站| 大唐荣耀在哪个平台看| 我家有喜 tv版 电视剧| 律师禁欲| ay电影| 绝世弃少逆袭:成传奇短剧全集| 妻子替弟还债全集免费观看| 小丈夫 电视剧| 吴京乘风电影免费观看| 木下檀檩子电影在线观看2023年上映时 | 仙帝归来短剧全集| 她的潮汐| 风流女管家在线观看完整版电视剧| 女生公寓中文版全集| 电影外出2| 须要爸爸的种子| 深田梨菜| 黑洞频率| 食物链截了一段视频原声| 夜宴在线观看| 万能阿曼动画片全集| 坎贝奇的《品味人生》| 小徐若瑄| 韩国产理伦片在线观看| 黑河市| 还珠格格新版全集免费观看| 朋友的妈妈在线免费| 冰封之城| 意大利满天星《航空母舰》| 小敏家电视剧免费观看第一季| 花子君第二季免费观看| 《疯狂小女生》法国版精彩片段 | 插曲的痛60集全集免费播放完整剧情 | 爱情公寓3电视剧| 浪漫满屋泰国版11| 黑白配中文版免费高清| 一出好戏电影完整版免费观看 | 刺客新传| 高清《沸腾人生》免费观看| 电影《牙医姐妹》正版在线看 | 剧情电影《姐妹2》正片免费观看| 夺命回声| 《妻子6》在线观看免费版电视剧中文| 西门庆潘金莲电影版| 直到世界末日| 修理工的艳遇HD电影在线观看| 惊声尖笑3免费版高清在线观看| 特种部队2百度影音| 浴火奔腾浴火奔腾| 仙剑奇侠传3第14集| 丈夫去上班的日子| 日本电影和讨厌社长出差旅| 九重紫电视剧全集| 三十而立电视剧免费观看全集| 进击的巨人oad3| 雷神托尔| 邻居也疯狂 电视剧| 蒙面超人铠武| 三年成全影视大全免费| 罪恶王冠18| 3d肉蒲团下载地址| 奇迹少女第三季免费完整版| 和部长| 末日之热浪来袭短剧| 韩剧电视剧大全免费观看 | 闪婚全集| 大棒打更人电视剧观看全集免费| 需要爸爸播种中的字| 雪水煮鸡蛋有什么作用| 一年一度喜剧大赛2综艺| 诱人的小峓子BD中文电影| 无敌当家| 庆帝到底想把皇位给谁| 牙医姐妹| 阳光正好电视剧免费观看全集| 岁岁年年柿柿红| 禽兽哥哥| 墨西哥电视剧《la rosa de guadalupe》(瓜达卢佩的玫瑰/奇迹玫瑰 在线 | 在线观看借枪| 在暴雪时分在线观看| 斗罗大陆高清免费观看| 青梅竹马是消防员第二季动漫剧情解析 | 日本电影漂亮的售楼小姐| 迪加奥特曼国语版全集| 瑜伽学院 电影| 男生女生愁愁愁电视剧在线观看| 美丽小蜜桃2绝对满天星值得一看| 喀秋莎行动电影完整版免费观看| 猎罪图鉴2在线看高清| 吴健版《农民伯伯2》播放免费看| 红鞋子电影| 高清如果能成为恋人未删减| 韩国大尺度电影上司与妻子电影在线观看 | 美乃雀电影在线观看全集| 一拳超人第3季免费完整版| 真爷们儿电视剧全集| 法版《执行秘书》2017 | 真心英雄2025免费观看完整版| 偷偷藏不住在线观看电视剧| 高压监狱法版1分45钟高清免费观看| 总裁独宠:只对一人全集免费| 双世宠妃第三季免费观看高清在线| 游樣t2| 狂飙40集在线观看免费| 烈火军校电视剧免费播放全集 | 我的时代和我免费观看| 黑色眼泪日语完整版| 百万新娘之爱无悔67| 西部枪手| 逃狱者天海翼电影完整版| 斗罗大陆177在线观看| 合成大西瓜网页版链接| 宜州市| 尺井芽衣| 男子胁迫前女友跳海殉情| 密战下载| 杰西简牺牲最大的电影| 哺乳期能烫头发吗| 只有神知道的世界| 黑白配国语在线播放免费观看| 相反的你和我未删减| 天堂午餐| 公之浮手5免费观看完整版| 龙潭之战越南战争片正片| 一路向西国语百度影音| 丑闻韩国电影| 隔壁邻居很美味日本伦理在线观看免费高清 | 北京辉子哥| 韩剧《隐形的帽子》| 搜下留情电视剧| 金玉满堂全集| 法国空乘4完整版播放| 求个没封的W站2021在线看| 大湾区晚会2024节目单| 孤单的儿媳免费观看全集| 二阶堂富美电影在线观看| 荣誉守则成人版在线看| 传闻中的七公主片尾曲| 善良的的瘦子| 杀戮霸刀| 星期五的寝室| 刚察县| 外姓兄弟| 好姑娘免费高清在线观看| 长生俱乐部| 19岁大学生免费看电视剧| spec结| 单身男女免费高清电视剧推荐| 极品教师第二季免费观看| 电视剧女婿难当| 牙医姐妹郝板栗1986| 流水迢迢在线观看| 杨三姐告状电视剧| 驯服小峓子2在线观看| 回复术士的重来人生观看| 男子姐姐值夜班离奇失踪多年| 《水润女人》刘智贤韩剧| 寡妇一夜爽了六次| 友人母在线播放BD高清| 一枪战三母国语版免费播放| 睫毛膏3美国1990| 赵灵儿获刑| 情侣之夜| 蒋玲玲版《渔夫的荒野史记》完整版 | 部长来我家韩国| 胜女的代价2 电视剧| 电影 毕业生| 侵犯女教师白峰美羽HD| 妈妈的职业在线观看免费| 飙速战车队免费全集在线观看| 游戏| 安斋拉拉在线观看免费版全集高清| 天堂有难| 《乡村爱情12》电视剧| 哇嘎电影高清完整视| 开心鬼粤语版| 目之所及| 凶降喜讯| 《需要爸爸播种美国》爸爸是谁扮演的| 满江红枪版| 东北风云黑道二十年| 《天字号监狱》电影在线观看免费高清 | 《丛林激情》男女主| 欢乐白领夫妻| 虐恋电影| 屠宰场娃娃完整版高清播放| 有翡电视剧免费| 松药店的儿子们54集| 梁山伯与祝英台在线观看| 赤坂丽在线观看| 逐玉电视剧| 甜心医生泰剧在线观看| 隔山有眼3生孩子那段| 伪娘刘著| 玫瑰的故事更新时间| 心肝宝贝任贤齐| 英子VS最强驱魔师| 沙漏全集| 破晓之爱国语版| 日本混血女大学生按摩| 饼干警长| 《恋爱暴君》动漫全集观看| 奋斗吧 少年在线观看免费完整版| 插曲的痛第60集全集免费播放韩国| 我是你婶娘免费观看高清韩剧| 多大的雪才算暴雪| 新有菜电影在线观看| 叶子楣个人3鸡片| 各自远飏| 唐人街探案3电影完整版免费| 正在播放:美丽寡妇偿还债务,巨乳少女葵司献身还债 - 17 | 法医嫡女短剧全集| 小东西我们几个都喂不饱你| 白嫖者电视剧在线观看免费| 海外行动| 我的家电视剧| 《白衣绳索牙医生》剧情介绍| 游泳女教练在线观看整板| 好久不见42集免费播放| 需要爸爸来播种 在线| 西门庆潘金莲电影版| 农民伯伯和乡下妹妹电视剧| 电影《需要爸爸播种》演员里的| 好想跟你在一起| 美丽姑娘免费观看高清| 变形金刚 高清| 美奈雀替夫还债免费电影观看 | 人民的名义 迅雷种子| 陆贞传奇52| 法国电影法国空姐4| 长空之王电影| 写的比较细的开车故事| 丈夫的上司来家拜访韩国| 王多鱼打扑克免费网站| 聊斋奇谭电影在线观看完整| 神奇燕尾服| 继拇想上我HD中字| 舔B拨弄深入抽插男女网站奖励 | 铿锵锵锵锵锵全集免费看| 再生人电影在线观看国语版| 丈夫的上司来家拜访日剧免费观看全| 短道速滑王蒙| 游泳教练的湿润教育电影在线观看| 那年我们一起追过的女孩| 一个妈妈的9中字头强华驿| 深情眼全集免费完整版| 电视剧天眼| 欧式少女第16集全集高清版观看网站| 黑色电话2未删减| 绝色美人谋短剧在线观看全集| 坎贝奇《无憾》完整版免费观看| xl司令动漫。视频| 宋孝敏《露营地》| 蝴蝶公墓网站| 法国女版《壮志凌云》高清免费哪儿 | 女超人麦乐迪无删减版完整版| 鞠婧祎免费造梦在线观看| 我从不忠截取的一段画面| 《秀才遇着兵》电视剧| 河南豫剧吹牛| 杰森鲁夫满天星电影合集| 那英真唱搁浅| 致命弯道5完整版在线观看视频| 终女武神第三季在线看| 莱恩安德森《满天星》| 龙少爷粤语| 郎咸平说mp3| 漂亮的小瘦了7| 王李丹妮维修工| 神偷奶爸3(普通话)| 北斋漫画在线观看完整版| 美丽妻子替弟还债| 民工也疯狂全集| 罗小黑战记40| 天时地利人和英文| 1—5集免费普通话版金 | 韩剧《白夜行》| 《医务室的小秘密》第二季在线观看| 超感警探第五季| 高压监狱在线观看法版免费| 八戒八戒在线观看免费观看高清8| 《女学生的滋味》HD| 情人可口| 新金梅瓶2 国语完整版| 暗恋成真:男神爱上我全集免费| 女超人:麦乐迪在线观看 | 回复术士重启在免费观看 | 菊次郎的夏天电影| 因为爱情有晴天免费观看完整版| 骄阳似我电视剧在线播放| 电视剧妻子免费观看| 战马一号电影在线观看免费| 首付电视剧全集| 江苏卫视电视直播| 花花公主1983满天星| 高清相反的你和我未删减| 局长趴在雪白的身上耸动| 杀戮都市在线观看| 要爸爸的种子电影| 电视剧南来北往| 姨母的绣惑电影在线| 宝儿only one| 21世纪爱情指南全8集免费观看高清版| 老婆的妈妈2观整有限中| 怪医杜立德3| 福鼎市| 侵犯高傲女教师电影白峰美羽| 越战电影在线观看免费完整版| 美人谋电视剧免费观看| 女儿国3满天星版在线观看| 生活中的玛利亚韩国电影免费 | 傻哥蹦迪| 姐姐妹妹闯北京| 少女农场| 夫君是敌国战神:和亲公主全集免费| 金蝉脱壳1| 我们结婚吧中国版| 红壳的潘多拉| 网友调侃宣布退出春节档| 酒店1-80集全集免费播放| WRITEAS粗壮| 老公原谅我在线| 妻子的新世界电视剧免费观看高清| 隐形帽子在线观看免费完整版| 客途秋恨| 伤城之恋 电视剧| 高清暗夜情报员 第三季未删减| 维修人员的培训 中字| 少年包青天第二部| ayy4电影| 维吾尔族美女| 妙手房术欧洲版剧情介绍| 美景之屋6普通话版| 电影杨三姐告状| 幸福归来电视剧免费观看完整版 | 公公之手日语中字2| 夫妻那点事免费看正片在线观看| 而立之年电视剧全集| 传说中的七公主| 法国电影空乘2完整版在线观看中文字幕| 神盾局特工第四季| 洛丽塔1997| 小巷人家电视剧免费高清观看| 刻晴大战史莱姆外服免费观看绝世威龙| 黄yyid频道| 漂亮妈妈7中字开头歌曲| 倔强的驱魔| 小娘惹在线观看电视剧剧情完整版| 大尺度动作片| 战狼6免费观看在线播放下载高清| 疯狂性生话电影免费播放| 变节:潜罪犯| 电影《汤唯》免费播放| 我的莫格利男孩在线观看| 麦乐迪女超人A片免费看| 《无能丈夫》日剧| 美国电影潜伏1| 我的好妈妈8高清中字在线观看| xi司令真人版全集免费播放| 优酷演技派| 一仆二主电视剧 全集| 极恶非道 1| 黛比浪漫女家教1| 谎言的诱惑| 神话优酷| 15yc| 电影美人鱼传说| 我叫刘跃进| 妖怪都市免费观看完整版在线播放| 成版《壮志凌云》| 44毛网| 菠萝蜜菠萝菠萝| 我唾弃你的坟墓2 豆瓣| 老电影洪湖赤卫队| JiZz日本| 九五之尊电视剧粤语| 《少年派》| 我的漂亮妻子4星空| 娃娃脸5完整版| 如狼似虎的母爱第三季剧情介绍| 完美无瑕电影| 密室大逃脱第四季第一期免费观看| 插曲的痛免费播放完整| 电影在线观看完整免费版| 功夫熊猫1国语高清| 法政先锋第三部粤语| 《上司的要求》| 凌云壮志满天星欧美版哪里看| 念无双动漫免费观看完整版 | 财神客栈| 息县县委书记金平去向| 大夏第一赘婿| 两个好媳妇电影完整版| 冲上云霄2优酷| 部长和社畜的恋情令人着急电视剧| 小镇姑娘国语免费观看 | 以爱为囚| 米加小镇日常vlog| 匆匆那些年电影| 义子侵犯北条麻妃在线观看 | 风雨哈佛路电影| 团鬼六:绳责| 战狼16欧式少女版资源百度云| 超清国语黄色仓库网vlp| 豆瓣进不去| 神机妙算刘伯温全集| 纵横四海粤语| 房奴试爱智恩电视剧开头原声| 可疑的美容院观看| 98古惑仔在线观看粤语版| 哈尔滨爆火官方坦言已准备一年| 特殊理发店待遇8的最新章节和内容 | 妈妈的职业2观看全集免费高清| 《法国航空》3| 与凤行更新时间| 九门电影| 美国电影《需要爸爸播种》在线播放| 妈妈的朋友手机在线观看| 古墓丽影1高清| 和嫂子一起同居的日子电影| 修理工在丈夫不在找谁帮忙 | 韩国电影后宫| 《龙门镖局》| 几度菊花香| JUQ–945在线播放| 兄弟车行 百度影音| 北京炸鸡加盟| 法国空乘2中字| 金银梅10普通话版| 美国式家庭禁忌1-6| 武林风泰山| 都市狂少:纵横都市无人敌全集免费| 高清《速度与激情9》免费| 战狼6免费观看高清下载电影| 美丽的秘密4动漫免费观看| 青柠在线观看免费高清电视剧下载| 谍影电视剧全集免费播放| 类似霜花店的电影| 锵锵锵锵锵锵锵锵电视剧免费观看音| 出差期间未婚妻遭前任多次欺负日剧 | 创:战神| 爱壹帆电视剧| 姑娘第8集免费高清完整版| 与我同眠迅雷下载| 火山上的两个人电影在线观看| 纯白交响曲动漫免费观看| 好男人在线观看免费观看| 《销售秘密》3| 恋恋不忘大结局| 横行霸盗| 我家有喜 tv版 电视剧 | 韩剧办公室蓝色隐身帽子动漫| 金牌师姐| 真白爱梨| 母子情仇电视剧| 女搜查官免费观看| 《哪吒2》免费完整版在线| 吞噬星空104集完整版| 仙逆更新至96集在线| 剑客浪心| 四个少妇按摩记A片| 神探狄仁杰 第四部| 电影《峡谷》| 《坏修女》免费观看高清电影 | 流行美发型图片| 美国派6在线观看| 最终列车醉汉一共有多少集| 维修师傅艳遇理论电影| 电影南拳王| 恩爱两不疑在哪里看完整版| 乘胜狙击粤语| 爱我几何完整| 销售的销售秘密4中字| 放牛班的春天| 我的土地我的家| 妹妹皇后| 91制片厂 - 看她社区| 汉语拼音字母表的正确读法 | 早川怜子电影| 空姐2免费高清完整版观看| 花样男子大结局| 王的女人共多少集| 漂亮的的小瘦子3| 失衡凶间| 神鬼战士1满天星免费观看完整版| 极速保镖| 老九影院| 三年大片在线观看免费观看第一集全| 五福临门在线观看| 三生三世枕上 书| 迪丽娜尔女儿| 坐公交车失去了第一次| 阿宾房东太太视频| 魔术师库诺看得见一切电视剧| 大鱼海棠| 离婚合同| 隔壁邻居很美味电视剧演员表| 水电工与邻居少妇奸情电影| 洛城特警| 客从何处来 易中天| 流光飞舞粤语| 酒店1-5集| 《需要爸爸播种》英文名怎么写| 罗十五原创动画8一30集| 肉蒲团 在线观看| 徒然喜欢你| 人猿泰山主演1995版| 日本电影丈夫不在家,公公突然来拜访| 杨门女将国语| 法政先锋第三部粤语| 如如影视我的罪恶人生| 白峰美羽在线播放| 漂亮瑜伽4在线观看| 韩国电影免费观看高清完整版在| 月光洒向离人巷| 笑傲江湖 李亚鹏| 牙医姐妹1986在线观看| 白峰美羽 在线伦理 妻子的诱惑 | 人世间电视剧全集免费观看高清| 名侦探柯南国语版tv| 差差差30分钟无盖视频| 《千金赤子板栗》完整版| 电影私人航空在线观看完整免费高清| 乡村爱情第4部| 悬崖之上免费| 终极蜘蛛侠毒液| 做aj的电视剧大全免费观看中国国语| 战狼6国语免费看| 蜜桃hd| 隐藏的面孔韩国电影在线观看| 高清7天未删减| 校园2015| 热带暴风雨行动满天星版| 《立春》在线观看| 庆余年讲的什么故事| 兄弟之道在线观看高清免费| 神秘的旅伴电影| 美容院特殊待遇纹身女电影| 高清《惊天大贼王》| 青梅竹马是消防2季未增删| 王牌保安电影| 一个巴掌赔偿100万| 坎贝奇在线观看免费版| 夜深沉在线观看| 我女友的妈妈| 炼气十万年短剧免费观看| 一眉道姑| 需要爸爸来播种在线观看| 21世纪性格爱情指南全8集中文| 金瓶玉梅免费版百度观看| 史诗电影| 今夜有戏新还珠格格| 出差商务大学生| 一个好妈妈的d5申字中头| 四面佛电视剧15集完整版| 氪金玩家的3d动漫| 性瘾成疾BY海棠| 礼泉县| 壮志凌云2法国满天星播放技巧| 方子传 电影完整版| 保安疑因停车矛盾杀害两人| 甄子丹情逢敌手| 私藏浪漫电视剧在线播放免费观看| 三级片男按摩师| 韩国办公室秘书| 般配关系短剧免费观看全集| 穿靴子的猫1免费观看完整版| 斧头帮音乐下载| 玩弄丰满的女学生在线观看| 莫妮卡爱我几何完整版在线| 日本调教虐乳在线观看| 凤姐直播| 恋夏500| 电视剧春草| 张震巩俐| 鸡宝厨房| 子曰卜学亮| 美和花园电影免费观看2023年上映的 | 白峰美羽女教师无删减播放| 法版《执行秘书》在线观看| 生命缘小雨| 水饺皇后电影| 人世间电视剧在线观看完整版免费| 《特殊保险销售员》| 电影《空中乘务2》免费观看完整版 | 极速恋人第二季未删减版第15集| jizz女学| 北京夜店电影| 终末的女武神樱花动漫在线观看| 公的浮之手中字40 | 我是乡巴佬| 《妻子的闺蜜》大结局| G版《法国空少》免费| 日剧维修工人上门维修| 青春沈庆吉他谱| 声生不息宝岛季12期完整版| 三更之2饺子| 战狼6欧式少女版资源百度云| 深爱综合网| 巨人新娘的花嫁2免费观看| 《检察官》全集观看| 芒果香谢军| 许冠杰光荣引退汇群星| 爱我几何电视剧免费观看完整版高清| 最美丽的小辣椒3| 《朱雀堂》电视剧全集免费观看下载| 隐身女侠的电影免费观看| 小欢喜电视剧完整版| 普安县| 大江大河3免费观看下载| 八戒八戒免费高清完整版| 猫狗大战1在线国语免费观看| 我家女友可不止可爱呢| 上海滩在线观看| 《需要爸爸播种子》免费观看在线播放_HD/无删减_1080P高清完整版电影 - 天堂 | 有菜和枫哥共同演出叫什么| 炸天小姐1983年在线观看| 一人之下剧场版在线观看| 篠田あゆみ| 《女房客2》电影| 正者无敌电视剧| 《特殊瑜伽教练》| 想要爸爸| 闪电十一人剧场版| star-438| 迷妄国度3| 蜈蚣咒未删减版完整版恐怖电影| 美国式家庭3妮娜| 使徒行者3粤语电视剧| 心灵诡计| 凌晨三点女人免费观看电视剧| 庆余年第二季免费完整| 宜兰市| 招待外卖员电影中文版免费观看| 大侦探第八季免费播放| 屠辛呕吐娃娃| 大蛇5国语版完整版| 玉蒲团之玉女心经下载| 《激战丛林》-罗莎·卡拉乔洛在线| 公的浮之手中文字幕高清版| 同学的母亲电影| 兰若寺电影| 水星魔女| 张碧晨 红玫瑰| 闺蜜的儿子中字ID叫什么名字| 电影《你的导师》免费观看| 弱杀在线| 缘分 电影| 大丈夫电视剧全集48| 宇宙巡警露露子| 《分娩按摩》免费观看高清| 铯妮玛亚洲欧洲夫妻轮换| 奥司他韦可以和布洛芬一起吃吗| 沉香如屑免费观看完整版电视剧| 神机妙算刘伯温第四单元| 如果时间有回音| 大牛影库战狼6免费观看| xl司令第一季全集在线看免费版 | 泰版流星花园在哪个软件可以看| 妈妈的学生ID| 女子学院姑娘们1983第一季| 《她跟谁都可以爱》第一集| 深海狂鲨高清| 海天之恋剧情| 天乩全集免费观看完整版| 和上司女部长出差完整版免费观看 | 电影窗外| 女子练瑜伽式骑车惊呆路人| 幻影行动| 私人航空电影完整版 | 欲乱情迷电影| 前夜 电视剧| 八佰在线观看| 韩国表妹| 我和保姆的色情片| 《家庭矛盾》melody在线| 鬼吹灯之精绝古城剧情介绍| 变形金刚2国语版| 白衣校花与大长腿免费观看电视剧| 韩国年轻子1| 欧式少女全集观看| 混血大学生精油按摩伦理在线| 天剑绝刀之独孤九剑| 团圆饭电视剧全集| 自古英雄出少年之岳飞| 《氪金玩家》樱花动漫| 莫妮爱我几何免费高清电影| 麦乐迪女超人》| 新警察故事| 我的妈妈是校花未删减| 灯草和尚2完整版普通话| 维修师傅的艳遇在线观看| 非凡医者1-40全集完整版| 电视剧焦裕禄| 摇曳庄的幽奈小姐动漫| 免费观看三年大片完整版电影| 震惊世界的武汉七二零事件| 晚娘电影全集| 韩剧鲨鱼剧情| 美国式家庭禁忌结局-3人狗| 凯帕克电影作品在线观看| 纵情欲海3迅雷下载| 降魔天师| 了不起的挑战第二季| 曾几何时的意思| 法国8号空姐| 星克莱尔《总统夫人》| 心灵的呼唤| 太空堡垒第一部国语版| 宫锁沉香结局| 布里奇顿 第四季全集观看| 某某电视剧在线观看全集免费播放| 销售的销售秘密4| 爱丫爱丫影院最新电视剧免费观看| 韩国19禁电影在线| 短剧网剧免费观看| 徐艺真《皇后驾到》| 地铁跑酷bug| 女子护卫队满天星1973完整版电影| 正在播放《美女家教的高清》手机在线免费观看_奇优影院手机版 | 电影《娜塔莉》在线观看完整版中文| 反黑路人甲粤语在线观看| 雪中行第二部50集免费观看| 龙云镇怪谈电影免费观看完整版| 孙颖莎26分钟下班| 打扑克免费视频| HD版泰山《激情丛林》中文完整版| 现在是和相爱的人一起生活吗| 王保长新篇第一部| 西游降魔篇 影音| 拜托小姐国语版全集| 女版战狼9学生| yellow高清免费视频| 我有个兄弟叫顺溜| 高清《奔跑吧第5季》综艺| 黑莲花攻略手册免费阅读完整版| 邵氏电影《风月奇谭》免费观看| 恶灵骑士1免费观看完整版在线观看 | 电视剧红妆| 万古神帝张若尘完整版| 美国禁忌睫毛膏8| 农民伯伯下乡第五部| 女扮男装短剧全集| 鉴证实录2| 迷你世界小王子吖| 张志新子女| 玉蒲团玉女心经qvod| 超女麦乐迪在线观看视频| 牙医姐妹 在线| 傲骨贤妻 第五季| 当我飞奔向你电视剧免费看| 乱世佳人电视剧免费观看全集| 思念是一种病齐秦| 疯狂原始人1国语版免费观看全集| 《天星术》免费| 特殊的女游泳教练在线观看| 电影《包青天》全集| 《澳门风云3》电影| 洗屋先生| 拳击儿媳| 功夫教练| 海之声电影在线观看免费完整高清原声 | 千金赤子板栗无删减版百度云| 二战德军发泄室正版| 易建联29分|