<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          算法工程師的工程修養(yǎng):Linux 服務(wù)器性能故障分析

          共 23998字,需瀏覽 48分鐘

           ·

          2021-09-22 15:16

          點(diǎn)擊上方機(jī)器學(xué)習(xí)與生成對(duì)抗網(wǎng)絡(luò)”,關(guān)注星標(biāo)

          獲取有趣、好玩的前沿干貨!

          掌握一些性能優(yōu)化工具和方法,這就需要在工作中不斷地積累;計(jì)算機(jī)基礎(chǔ)知識(shí)很重要,比如說(shuō)網(wǎng)絡(luò)知識(shí)、操作系統(tǒng)知識(shí)等等,掌握了基礎(chǔ)知識(shí)才能讓你在優(yōu)化過(guò)程中抓住性能問(wèn)題的關(guān)鍵,也能在性能優(yōu)化過(guò)程中游刃有余。

          雖然監(jiān)控工具可以幫助我們解決大多數(shù)問(wèn)題,但我們有時(shí)需要登錄實(shí)例并運(yùn)行一些標(biāo)準(zhǔn)的 Linux 性能工具。

          看他們通過(guò)十條命令在一分鐘內(nèi)對(duì)機(jī)器性能問(wèn)題進(jìn)行診斷。在 60 秒內(nèi),您可以通過(guò)運(yùn)行以下十個(gè)命令,對(duì)系統(tǒng)資源使用情況和正在運(yùn)行的進(jìn)程有一個(gè)高層次的了解。尋找錯(cuò)誤和飽和度指標(biāo),因?yàn)樗鼈兌己苋菀捉忉專(zhuān)缓笫琴Y源利用率。飽和是指資源的負(fù)載超出其處理能力的情況,可以作為請(qǐng)求隊(duì)列的長(zhǎng)度或等待時(shí)間來(lái)公開(kāi)。

          當(dāng)我們把 Linux 操作系統(tǒng)所有的關(guān)鍵一級(jí)計(jì)數(shù)器找完之后,就會(huì)得到這樣一張圖:

          這些命令的輸出,有助于快速定位性能瓶頸。主要檢查出圖中標(biāo)紅的計(jì)數(shù)器,所有資源(CPU、內(nèi)存、磁盤(pán) IO 等)的利用率(utilization)、飽和度(saturation)和錯(cuò)誤(error)度量,也就是 Brendan Gregg 提出的 USE 方法。

          uptime
          dmesg | tail
          vmstat 1
          mpstat -P ALL 1
          pidstat 1
          iostat -xz 1
          free -m
          sar -n DEV 1
          sar -n TCP,ETCP 1
          top

          下面我們來(lái)逐一介紹下這些命令,有關(guān)這些命令更多的參數(shù)和說(shuō)明,請(qǐng)參照命令的手冊(cè)。

          uptime

          這個(gè)命令可以快速查看機(jī)器的負(fù)載情況:

          $ uptime
          23:51:26 up 21:31,  1 user,  load average: 30.02, 26.43, 19.02

          在 Linux 系統(tǒng)中,平均負(fù)載是指單位時(shí)間內(nèi),系統(tǒng)處于可運(yùn)行狀態(tài)和不可中斷狀態(tài)的平均進(jìn)程數(shù),也就是平均活躍進(jìn)程數(shù)。可運(yùn)行狀態(tài)的進(jìn)程,是指正在使用 CPU 或者正在等待 CPU 的進(jìn)程,也就是我們常用 ps 命令看到的,處于 R 狀態(tài)(Running 或 Runnable)的進(jìn)程。不可中斷狀態(tài)的進(jìn)程則是正處于內(nèi)核態(tài)關(guān)鍵流程中的進(jìn)程,并且這些流程是不可打斷的。這些數(shù)據(jù)可以讓我們對(duì)系統(tǒng)資源使用有一個(gè)宏觀的了解。

          命令的輸出分別表示 1 分鐘、5 分鐘、15 分鐘的平均負(fù)載情況。通過(guò)這三個(gè)數(shù)據(jù),可以了解服務(wù)器負(fù)載是在趨于緊張還是區(qū)域緩解。如果 1 分鐘平均負(fù)載很高,而 15 分鐘平均負(fù)載很低,說(shuō)明服務(wù)器正在命令高負(fù)載情況,需要進(jìn)一步排查 CPU 資源都消耗在了哪里。反之,如果 15 分鐘平均負(fù)載很高,1 分鐘平均負(fù)載較低,則有可能是 CPU 資源緊張時(shí)刻已經(jīng)過(guò)去。

          上面例子中的輸出,可以看見(jiàn)最近 1 分鐘的平均負(fù)載非常高,且遠(yuǎn)高于最近 15 分鐘負(fù)載,因此我們需要繼續(xù)排查當(dāng)前系統(tǒng)中有什么進(jìn)程消耗了大量的資源。可以通過(guò)下文將會(huì)介紹的 vmstat、mpstat 等命令進(jìn)一步排查。

          dmesg | tail

          $ dmesg | tail
          [1880957.563150] perl invoked oom-killer: gfp_mask=0x280da, order=0, oom_score_adj=0
          [...]
          [1880957.563400] Out of memory: Kill process 18694 (perl) score 246 or sacrifice child
          [1880957.563408] Killed process 18694 (perl) total-vm:1972392kB, anon-rss:1953348kB, file-rss:0kB
          [2320864.954447] TCP: Possible SYN flooding on port 7001. Dropping request.  Check SNMP counters.

          這將查看最近 10 條系統(tǒng)消息(如果有)。查找可能導(dǎo)致性能問(wèn)題的錯(cuò)誤。上面的示例包括 oom-killer 和 TCP 丟棄請(qǐng)求。不要錯(cuò)過(guò)這一步!dmesg 總是值得檢查。這些日志可以幫助排查性能問(wèn)題。

          vmstat

          $ vmstat 1
          procs ---------memory---------- ---swap-- -----io---- -system-- ------cpu-----
          r  b swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
          34  0    0 200889792  73708 591828    0    0     0     5    6   10 96  1  3  0  0
          32  0    0 200889920  73708 591860    0    0     0   592 13284 4282 98  1  1  0  0
          32  0    0 200890112  73708 591860    0    0     0     0 9501 2154 99  1  0  0  0
          32  0    0 200889568  73712 591856    0    0     0    48 11900 2459 99  0  0  0  0
          32  0    0 200890208  73712 591860    0    0     0     0 15898 4840 98  1  1  0  0

          每行會(huì)輸出一些系統(tǒng)核心指標(biāo),這些指標(biāo)可以讓我們更詳細(xì)的了解系統(tǒng)狀態(tài)。后面跟的參數(shù) 1,表示每秒輸出一次統(tǒng)計(jì)信息,表頭提示了每一列的含義,這里介紹一些和性能調(diào)優(yōu)相關(guān)的列:

          r:等待在 CPU 資源的進(jìn)程數(shù)量。這個(gè)數(shù)據(jù)比平均負(fù)載更加能夠體現(xiàn) CPU 負(fù)載情況,數(shù)據(jù)中不包含等待 IO 的進(jìn)程。如果這個(gè)數(shù)值大于機(jī)器 CPU 核數(shù),那么機(jī)器的 CPU 資源已經(jīng)飽和。

          free:系統(tǒng)可用內(nèi)存數(shù)(以千字節(jié)為單位),如果剩余內(nèi)存不足,也會(huì)導(dǎo)致系統(tǒng)性能問(wèn)題。下文介紹到的 free 命令,可以更詳細(xì)的了解系統(tǒng)內(nèi)存的使用情況。

          si, so:交換區(qū)寫(xiě)入和讀取的數(shù)量。如果這個(gè)數(shù)據(jù)不為 0,說(shuō)明系統(tǒng)已經(jīng)在使用交換區(qū)(swap),機(jī)器物理內(nèi)存已經(jīng)不足。

          us, sy, id, wa, st:這些都代表了 CPU 時(shí)間的消耗,它們分別表示用戶時(shí)間(user)、系統(tǒng)(內(nèi)核)時(shí)間(sys)、空閑時(shí)間(idle)、IO 等待時(shí)間(wait)和被偷走的時(shí)間(stolen,一般被其他虛擬機(jī)消耗)。

          上述這些 CPU 時(shí)間,可以讓我們很快了解 CPU 是否處于繁忙狀態(tài)。一般情況下,如果用戶時(shí)間和系統(tǒng)時(shí)間相加非常大,CPU 處于忙于執(zhí)行指令。如果 IO 等待時(shí)間很長(zhǎng),那么系統(tǒng)的瓶頸可能在磁盤(pán) IO。示例命令的輸出可以看見(jiàn),大量 CPU 時(shí)間消耗在用戶態(tài),也就是用戶應(yīng)用程序消耗了 CPU 時(shí)間。這不一定是性能問(wèn)題,需要結(jié)合 r 隊(duì)列,一起分析。

          mpstat -P ALL 1

          $ mpstat -P ALL 1
          Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015  _x86_64_ (32 CPU)
          07:38:49 PM  CPU   %usr  %nice   %sys %iowait   %irq  %soft  %steal  %guest  %gnice  %idle
          07:38:50 PM  all  98.47   0.00   0.75    0.00   0.00   0.00    0.00    0.00    0.00   0.78
          07:38:50 PM    0  96.04   0.00   2.97    0.00   0.00   0.00    0.00    0.00    0.00   0.99
          07:38:50 PM    1  97.00   0.00   1.00    0.00   0.00   0.00    0.00    0.00    0.00   2.00
          07:38:50 PM    2  98.00   0.00   1.00    0.00   0.00   0.00    0.00    0.00    0.00   1.00
          07:38:50 PM    3  96.97   0.00   0.00    0.00   0.00   0.00    0.00    0.00    0.00   3.03
          [...]

          該命令可以顯示每個(gè) CPU 的占用情況,如果有一個(gè) CPU 占用率特別高,那么有可能是一個(gè)單線程應(yīng)用程序引起的。

          pidstat 1

          $ pidstat 1
          Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015    _x86_64_    (32 CPU)

          07:41:02 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
          07:41:03 PM     0         9    0.00    0.94    0.00    0.94     1  rcuos/0
          07:41:03 PM     0      4214    5.66    5.66    0.00   11.32    15  mesos-slave
          07:41:03 PM     0      4354    0.94    0.94    0.00    1.89     8  java
          07:41:03 PM     0      6521 1596.23    1.89    0.00 1598.11    27  java
          07:41:03 PM     0      6564 1571.70    7.55    0.00 1579.25    28  java
          07:41:03 PM 60004     60154    0.94    4.72    0.00    5.66     9  pidstat

          07:41:03 PM   UID       PID    %usr %system  %guest    %CPU   CPU  Command
          07:41:04 PM     0      4214    6.00    2.00    0.00    8.00    15  mesos-slave
          07:41:04 PM     0      6521 1590.00    1.00    0.00 1591.00    27  java
          07:41:04 PM     0      6564 1573.00   10.00    0.00 1583.00    28  java
          07:41:04 PM   108      6718    1.00    0.00    0.00    1.00     0  snmp-pass
          07:41:04 PM 60004     60154    1.00    4.00    0.00    5.00     9  pidstat

          pidstat 命令輸出進(jìn)程的 CPU 占用率,該命令會(huì)持續(xù)輸出,并且不會(huì)覆蓋之前的數(shù)據(jù),可以方便觀察系統(tǒng)動(dòng)態(tài)。如上的輸出,可以看見(jiàn)兩個(gè) JAVA 進(jìn)程占用了將近 1600% 的 CPU 時(shí)間,既消耗了大約 16 個(gè) CPU 核心的運(yùn)算資源。

          iostat -xz 1

          $ iostat -xz 1
          avg-cpu:  %user   %nice %system %iowait  %steal   %idle
                     0.13    0.00    0.10    0.01    0.00   99.76

          Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
          vda               0.00     0.62    0.03    0.89     0.57     7.97    18.52     0.00    0.68    1.96    0.64   0.60   0.06
          vdb               0.00     0.02    0.00    0.38     0.05     2.64    14.12     0.00    0.84    0.46    0.84   0.54   0.02
          dm-0              0.00     0.00    0.00    0.40     0.01     2.75    13.62     0.00    0.98    0.37    0.98   0.35   0.01

          avg-cpu:  %user   %nice %system %iowait  %steal   %idle
                     0.25    0.00    0.00    0.00    0.00   99.75

          Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
          vda               0.00     0.00    0.00    1.00     0.00     4.00     8.00     0.00    0.00    0.00    0.00   1.00   0.10

          avg-cpu:  %user   %nice %system %iowait  %steal   %idle
                     0.00    0.00    0.00    0.00    0.00  100.00

          iostat 命令主要用于查看機(jī)器磁盤(pán) IO 情況。該命令輸出的列,主要含義是:

          r/s, w/s, rkB/s, wkB/s:分別表示每秒讀寫(xiě)次數(shù)和每秒讀寫(xiě)數(shù)據(jù)量(千字節(jié))。讀寫(xiě)量過(guò)大,可能會(huì)引起性能問(wèn)題。

          await:IO 操作的平均等待時(shí)間,單位是毫秒。這是應(yīng)用程序在和磁盤(pán)交互時(shí),需要消耗的時(shí)間,包括 IO 等待和實(shí)際操作的耗時(shí)。如果這個(gè)數(shù)值過(guò)大,可能是硬件設(shè)備遇到了瓶頸或者出現(xiàn)故障。

          avgqu-sz:向設(shè)備發(fā)出的請(qǐng)求平均數(shù)量。如果這個(gè)數(shù)值大于 1,可能是硬件設(shè)備已經(jīng)飽和(部分前端硬件設(shè)備支持并行寫(xiě)入)。

          %util:設(shè)備利用率。這個(gè)數(shù)值表示設(shè)備的繁忙程度,經(jīng)驗(yàn)值是如果超過(guò) 60,可能會(huì)影響 IO 性能(可以參照 IO 操作平均等待時(shí)間)。如果到達(dá) 100%,說(shuō)明硬件設(shè)備已經(jīng)飽和。

          如果顯示的是邏輯設(shè)備的數(shù)據(jù),那么設(shè)備利用率不代表后端實(shí)際的硬件設(shè)備已經(jīng)飽和。值得注意的是,即使 IO 性能不理想,也不一定意味應(yīng)用程序會(huì)出現(xiàn)性能問(wèn)題,可以利用諸如預(yù)讀取、寫(xiě)緩存等策略提升應(yīng)用性能。

          free –m

          free -m
                      total       used       free     shared    buffers     cached
          Mem:        245998      24545     221453         83         59        541
          -/+ buffers/cache:      23944     222053
          Swap:            0          0          0

          free 命令可以查看系統(tǒng)內(nèi)存的使用情況,-m 參數(shù)表示按照兆字節(jié)展示。最后兩列分別表示用于 IO 緩存的內(nèi)存數(shù),和用于文件系統(tǒng)頁(yè)緩存的內(nèi)存數(shù)。需要注意的是,第二行 -/+ buffers/cache,看上去緩存占用了大量?jī)?nèi)存空間。這是 Linux 系統(tǒng)的內(nèi)存使用策略,盡可能的利用內(nèi)存,如果應(yīng)用程序需要內(nèi)存,這部分內(nèi)存會(huì)立即被回收并分配給應(yīng)用程序。因此,這部分內(nèi)存一般也被當(dāng)成是可用內(nèi)存。如果可用內(nèi)存非常少,系統(tǒng)可能會(huì)動(dòng)用交換區(qū)(如果配置了的話),這樣會(huì)增加 IO 開(kāi)銷(xiāo)(可以在 iostat 命令中體現(xiàn)),降低系統(tǒng)性能。

          sar -n DEV 1

          $ sar -n DEV 1
          Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015     _x86_64_    (32 CPU)
          12:16:48 AM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
          12:16:49 AM      eth0  18763.00   5032.00  20686.42    478.30      0.00      0.00      0.00      0.00
          12:16:49 AM        lo     14.00     14.00      1.36      1.36      0.00      0.00      0.00      0.00
          12:16:49 AM   docker0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
          12:16:49 AM     IFACE   rxpck/s   txpck/s    rxkB/s    txkB/s   rxcmp/s   txcmp/s  rxmcst/s   %ifutil
          12:16:50 AM      eth0  19763.00   5101.00  21999.10    482.56      0.00      0.00      0.00      0.00
          12:16:50 AM        lo     20.00     20.00      3.25      3.25      0.00      0.00      0.00      0.00
          12:16:50 AM   docker0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

          sar 命令在這里可以查看網(wǎng)絡(luò)設(shè)備的吞吐率。在排查性能問(wèn)題時(shí),可以通過(guò)網(wǎng)絡(luò)設(shè)備的吞吐量,判斷網(wǎng)絡(luò)設(shè)備是否已經(jīng)飽和。如示例輸出中,eth0 網(wǎng)卡設(shè)備,吞吐率大概在 22 Mbytes/s,既 176 Mbits/sec,沒(méi)有達(dá)到 1Gbit/sec 的硬件上限。

          sar -n TCP,ETCP 1

          $ sar -n TCP,ETCP 1
          Linux 3.13.0-49-generic (titanclusters-xxxxx)  07/14/2015    _x86_64_    (32 CPU)
          12:17:19 AM  active/s passive/s    iseg/s    oseg/s
          12:17:20 AM      1.00      0.00  10233.00  18846.00
          12:17:19 AM  atmptf/s  estres/s retrans/s isegerr/s   orsts/s
          12:17:20 AM      0.00      0.00      0.00      0.00      0.00
          12:17:20 AM  active/s passive/s    iseg/s    oseg/s
          12:17:21 AM      1.00      0.00   8359.00   6039.00
          12:17:20 AM  atmptf/s  estres/s retrans/s isegerr/s   orsts/s
          12:17:21 AM      0.00      0.00      0.00      0.00      0.00

          sar 命令在這里用于查看 TCP 連接狀態(tài),其中包括:

          active/s:每秒本地發(fā)起的 TCP 連接數(shù),既通過(guò) connect 調(diào)用創(chuàng)建的 TCP 連接;

          passive/s:每秒遠(yuǎn)程發(fā)起的 TCP 連接數(shù),即通過(guò) accept 調(diào)用創(chuàng)建的 TCP 連接;

          retrans/s:每秒 TCP 重傳數(shù)量;

          TCP 連接數(shù)可以用來(lái)判斷性能問(wèn)題是否由于建立了過(guò)多的連接,進(jìn)一步可以判斷是主動(dòng)發(fā)起的連接,還是被動(dòng)接受的連接。TCP 重傳可能是因?yàn)榫W(wǎng)絡(luò)環(huán)境惡劣,或者服務(wù)器壓力過(guò)大導(dǎo)致丟包。重傳會(huì)嚴(yán)重影響tcp的效率,可以使用Brendan Gregg開(kāi)發(fā)的一個(gè)輕量級(jí)tcp重傳抓取工具: tcpretrans。

          top

          $ top
          top - 00:15:40 up 21:56,  1 user,  load average: 31.0929.8729.92
          Tasks: 871 total,   1 running, 868 sleeping,   0 stopped,   2 zombie
          %Cpu(s): 96.8 us,  0.4 sy,  0.0 ni,  2.7 id,  0.1 wa,  0.0 hi,  0.0 si,  0.0 st
          KiB Mem:  25190241+total, 24921688 used, 22698073+free,    60448 buffers
          KiB Swap:        0 total,        0 used,        0 free.   554208 cached Mem
            PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
          20248 root      20   0  0.2270.012t  18748 S  3090  5.2  29812:58 java
           4213 root      20   0 2722544  64640  44232 S  23.5  0.0 233:35.37 mesos-slave
          66128 titancl+  20   0   24344   2332   1172 R   1.0  0.0   0:00.07 top
           5235 root      20   0 38.227547004  49996 S   0.7  0.2   2:02.74 java
           4299 root      20   0 20.0152.682g  16836 S   0.3  1.1  33:14.42 java
              1 root      20   0   33620   2920   1496 S   0.0  0.0   0:03.82 init
              2 root      20   0       0      0      0 S   0.0  0.0   0:00.02 kthreadd
              3 root      20   0       0      0      0 S   0.0  0.0   0:05.35 ksoftirqd/0
              5 root       0 -20       0      0      0 S   0.0  0.0   0:00.00 kworker/0:0H
              6 root      20   0       0      0      0 S   0.0  0.0   0:06.94 kworker/u256:0
              8 root      20   0       0      0      0 S   0.0  0.0   2:38.05 rcu_sched

          top 命令包含了前面好幾個(gè)命令的檢查的內(nèi)容。比如系統(tǒng)負(fù)載情況(uptime)、系統(tǒng)內(nèi)存使用情況(free)、系統(tǒng) CPU 使用情況(vmstat)等。因此通過(guò)這個(gè)命令,可以相對(duì)全面的查看系統(tǒng)負(fù)載的來(lái)源。同時(shí),top 命令支持排序,可以按照不同的列排序,方便查找出諸如內(nèi)存占用最多的進(jìn)程、CPU 占用率最高的進(jìn)程等。但是,top 命令相對(duì)于前面一些命令,輸出是一個(gè)瞬間值,如果不持續(xù)盯著,可能會(huì)錯(cuò)過(guò)一些線索。這時(shí)可能需要暫停 top 命令刷新,來(lái)記錄和比對(duì)數(shù)據(jù)。

          總結(jié)

          排查 Linux 服務(wù)器性能問(wèn)題還有很多工具,上面介紹的一些命令,可以幫助我們快速的定位問(wèn)題。例如前面的示例輸出,多個(gè)證據(jù)證明有 JAVA 進(jìn)程占用了大量 CPU 資源,之后的性能調(diào)優(yōu)就可以針對(duì)應(yīng)用程序進(jìn)行。

          參考鏈接

          來(lái)看 Netflix 性能工程團(tuán)隊(duì)的這篇博文:https://netflixtechblog.com/linux-performance-analysis-in-60-000-milliseconds-accc10403c55

          The USE Method: https://www.brendangregg.com/usemethod.html

          轉(zhuǎn)載:運(yùn)維開(kāi)發(fā)故事
          原文:https://tinyurl.com/rsyjhzhw


          猜您喜歡:

          等你著陸!【GAN生成對(duì)抗網(wǎng)絡(luò)】知識(shí)星球!

          CVPR 2021 | GAN的說(shuō)話人驅(qū)動(dòng)、3D人臉論文匯總

          CVPR 2021 | 圖像轉(zhuǎn)換 今如何?幾篇GAN論文

          【CVPR 2021】通過(guò)GAN提升人臉識(shí)別的遺留難題

          CVPR 2021生成對(duì)抗網(wǎng)絡(luò)GAN部分論文匯總

          經(jīng)典GAN不得不讀:StyleGAN

          最新最全20篇!基于 StyleGAN 改進(jìn)或應(yīng)用相關(guān)論文

          超100篇!CVPR 2020最全GAN論文梳理匯總!

          附下載 | 《Python進(jìn)階》中文版

          附下載 | 經(jīng)典《Think Python》中文版

          附下載 | 《Pytorch模型訓(xùn)練實(shí)用教程》

          附下載 | 最新2020李沐《動(dòng)手學(xué)深度學(xué)習(xí)》

          附下載 | 《可解釋的機(jī)器學(xué)習(xí)》中文版

          附下載 |《TensorFlow 2.0 深度學(xué)習(xí)算法實(shí)戰(zhàn)》

          附下載 | 超100篇!CVPR 2020最全GAN論文梳理匯總!

          附下載 |《計(jì)算機(jī)視覺(jué)中的數(shù)學(xué)方法》分享

          瀏覽 45
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲乱码国产 | 男女啪啪网站国产 | 日韩乱轮视频 | 亚洲影院在线观看 | 91日韩无码 |