JMeter性能測(cè)試-服務(wù)器資源監(jiān)控插件PerfMon詳解

文章目錄

零.引言
壹.基礎(chǔ)
1.1 ServerAgent部署
1.2 PerfMon插件使用
貳.進(jìn)階
2.1 指標(biāo)
2.2 曲線圖
2.3 自定義指標(biāo)
叁.總結(jié)

JMeter性能測(cè)試-服務(wù)器資源監(jiān)控插件詳解

轉(zhuǎn)自:技能鍛造室

image

零.引言

我們對(duì)被測(cè)應(yīng)用進(jìn)行性能測(cè)試時(shí)管毙,除了關(guān)注吞吐量、響應(yīng)時(shí)間等應(yīng)用自身的表現(xiàn)外巷波,對(duì)應(yīng)用運(yùn)行所涉及的服務(wù)器資源的使用情況杰赛,也是非常重要的方面符相,通過(guò)實(shí)時(shí)監(jiān)控今布,可以準(zhǔn)確的把握不同測(cè)試場(chǎng)景下服務(wù)器資源消耗情況的變化凌那,對(duì)于應(yīng)用性能分析有著重要的作用胧沫,同時(shí)也是調(diào)整測(cè)試場(chǎng)景設(shè)計(jì)的重要依據(jù)昌简。對(duì)于使用JMeter執(zhí)行性能測(cè)試的朋友占业,可能大都知道jmeter-plugins中就有用于服務(wù)器資源監(jiān)控的插件PerfMon Metrics Collector,同時(shí)也有不少同學(xué)會(huì)選擇類(lèi)似nmon的獨(dú)立監(jiān)控方案纯赎。

之所以決定寫(xiě)這篇文章谦疾,一是因?yàn)樵谑褂肑Meter作為性能測(cè)試工具的情況下,使用專(zhuān)為其設(shè)計(jì)的插件會(huì)更方便犬金,二是對(duì)于普通互聯(lián)網(wǎng)公司的性能測(cè)試方案念恍,這款插件所提供的功能已經(jīng)可以滿足其資源監(jiān)控方面的大多數(shù)需求,而最重要的一點(diǎn)晚顷,是在技術(shù)群里發(fā)現(xiàn)雖然很多同學(xué)知道或者在用這款插件峰伙,但是對(duì)于一些概念和細(xì)節(jié),并不了解该默,導(dǎo)致不能很好的滿足自己的需求词爬,而現(xiàn)在網(wǎng)絡(luò)上介紹這款插件的博客文章,大都是Quick Start式的入門(mén)文章权均,并不能解答這些同學(xué)的疑問(wèn)顿膨。
注:本文使用的JMeter版本為當(dāng)前最新release版本3.2。

壹.基礎(chǔ)

本來(lái)PerfMon插件的安裝部署不是本文的重點(diǎn)叽赊,但為了保持文章的完整性恋沃,這里還是進(jìn)行簡(jiǎn)單的介紹。有基礎(chǔ)的同學(xué)可以跳過(guò)必指。

使用PerfMon進(jìn)行服務(wù)器資源監(jiān)控的方案由兩部分來(lái)實(shí)現(xiàn)

  1. ServerAgent囊咏,部署在被測(cè)服務(wù)器,負(fù)責(zé)資源耗用數(shù)據(jù)的采集塔橡,其功能實(shí)現(xiàn)主要基于hyperic的SIGAR梅割。
  2. PerfMon Listener,以插件形式集成到JMeter葛家,作為其中一個(gè)Listener户辞。

1.1 ServerAgent部署

  • 前提:ServerAgent運(yùn)行需要jre1.4以上版本支持。
  • 下載:從官方下載
  • 部署:將下載的.zip放置到被測(cè)服務(wù)器癞谒,解壓后底燎,直接運(yùn)行startAgent.sh(Linux)/startAgent.bat(Windows)即可,與JMeter進(jìn)行數(shù)據(jù)傳輸時(shí)使用簡(jiǎn)單的文本協(xié)議弹砚,默認(rèn)使用TCP協(xié)議双仍,默認(rèn)端口4444。當(dāng)然桌吃,在Linux朱沃,我們通常將其放在后臺(tái)運(yùn)行,比如用nohup。
    • 驗(yàn)證:為了保證測(cè)試過(guò)程的順暢逗物,我們可以先行確認(rèn)JMeter壓力機(jī)與被測(cè)服務(wù)器上部署的ServerAgent的通信是否正常搬卒。一個(gè)簡(jiǎn)便的方法是在JMeter壓力機(jī)使用telnet像ServerAgent發(fā)送”test”,如telnet 192.168.18.10 4444敬察,連通后秀睛,輸入test,正常情況下ServerAgent會(huì)輸出類(lèi)似INFO 2017-07-29 23:10:52.430 [kg.apc.p] (): Yep, we received the 'test' command的日志莲祸。

可以在運(yùn)行腳本時(shí)添加--tcp-port xxx來(lái)指定端口蹂安,如$ ./startAgent.sh --tcp-port 3450,需要注意的是此時(shí)JMeterPerfMon插件使用時(shí)也需要對(duì)綁定端口進(jìn)行對(duì)應(yīng)修改锐帜。更多信息可以參考下載頁(yè)的官方文檔田盈。

1.2 PerfMon插件使用

  • 安裝:JMeter3.0之后,有兩種方式安裝jmeter-plugins所包含的插件缴阎。
    • 第一種方式:到jmeter-plugins官網(wǎng)搜索PerfMon并下載允瞧,將得到的jar包放置于JMeter安裝目錄的lib/ext/路徑下,重啟JMeter蛮拔,從Listener中選擇使用插件述暂。

      圖1 插件下載

      圖1 插件下載

    • 第二種方式:使用Plugins Manager,不過(guò)由于國(guó)內(nèi)眾所周知的原因建炫,很多同學(xué)可能遇到網(wǎng)絡(luò)不通不能展示插件的問(wèn)題畦韭,這里就不展開(kāi)了,可參考我之前的文章:JMeter性能測(cè)試3.0時(shí)代之-全新JMeter插件管理

  • 使用:如圖2所示肛跌,在Listener中選擇PerfMon插件艺配,添加到測(cè)試計(jì)劃中,然后參考圖3進(jìn)行配置衍慎,包括配置部署了ServerAgent的被測(cè)服務(wù)器的IP转唉、ServerAgent使用的端口、要獲取和展示的資源項(xiàng)等稳捆。測(cè)試啟動(dòng)后
圖2 使用PerfMon插件

圖2 使用PerfMon插件

圖3 配置

圖3 配置

  • 數(shù)據(jù)觀察和保存:在使用GUI模式進(jìn)行調(diào)試時(shí)赠法,測(cè)試啟動(dòng)后,可以直接在對(duì)應(yīng)窗口觀察到根據(jù)采集數(shù)據(jù)描繪的圖形眷柔。而要在使用NO GUI模式正式執(zhí)行測(cè)試后期虾,查看監(jiān)控?cái)?shù)據(jù),可以在設(shè)計(jì)測(cè)試計(jì)劃時(shí)在圖3的Filename位置配置數(shù)據(jù)要保存的地址驯嘱,它和保存JMeter測(cè)試主數(shù)據(jù)的方式一樣,需要注意的是不要和JMeter測(cè)試主數(shù)據(jù)保存到同一個(gè)文件喳坠。在測(cè)試執(zhí)行完成后鞠评,再在插件界面載入這個(gè)文件,即可顯示監(jiān)控?cái)?shù)據(jù)的圖形展示壕鹉。

貳.進(jìn)階

從同事剃幌、技術(shù)群友們那里聋涨,我了解到有不少同學(xué)對(duì)于PerfMon插件展示的各個(gè)指標(biāo)數(shù)據(jù)的含義,特別是單位并不是特別明確负乡,所以先講一下這部分牍白。另外對(duì)于數(shù)據(jù)曲線圖的展示,也有一些點(diǎn)值得說(shuō)明抖棘。

2.1 指標(biāo)

關(guān)于監(jiān)控指標(biāo)數(shù)據(jù)的疑惑茂腥,大多可以從PerfMon插件的Metric parameter設(shè)置界面找到答案。我們知道對(duì)于服務(wù)器如CPU切省、內(nèi)存等每一個(gè)監(jiān)控指標(biāo)類(lèi)型最岗,都有多種數(shù)據(jù)從不同維度來(lái)體現(xiàn)資源使用情況,比如對(duì)于CPU朝捆,在Linux系統(tǒng)用top命令般渡,就可以看idleuser芙盘、system等數(shù)據(jù)驯用。

對(duì)于PerfMon插件,可以通過(guò)Metric parameter來(lái)設(shè)置某種資源具體要收集和展示的數(shù)據(jù)儒老,只是它的入口并不是很醒目蝴乔,如下圖4右上的紅色箭頭所指,需要雙擊輸入框后贷盲,點(diǎn)擊最后邊的按鈕打開(kāi)淘这,打開(kāi)的界面如圖4中級(jí)紅色箭頭所指,雖然每種指標(biāo)的具體配置項(xiàng)不同巩剖,但結(jié)構(gòu)相同铝穷,都分為Primary MetricsAdditional Metrics等等佳魔,Primary是官方認(rèn)為常用的曙聂,通常也是實(shí)際工作中更關(guān)心,更具有參考意義的指標(biāo)項(xiàng)鞠鲜,Additional則是在一些特殊場(chǎng)景可能需要了解的指標(biāo)項(xiàng)宁脊。

圖4 監(jiān)控指標(biāo)參數(shù)設(shè)置

圖4 監(jiān)控指標(biāo)參數(shù)設(shè)置

這里先簡(jiǎn)單說(shuō)一下幾種主要的資源類(lèi)型的指標(biāo)項(xiàng),對(duì)應(yīng)的圖就不貼了贤姆,太占篇幅榆苞,影響閱讀:

  1. CPU
    • 對(duì)于各指標(biāo)項(xiàng),數(shù)值都是代表百分比霞捡,比如默認(rèn)配置(combined)下在曲線圖中看到某個(gè)時(shí)間的數(shù)值是30坐漏,即代表此時(shí)總的cpu使用時(shí)間占比為30%。
    • 有兩點(diǎn)比較有用的地方值得說(shuō)明:一是在Scope區(qū)域,可以通過(guò)Per Process選項(xiàng)來(lái)獲取指定進(jìn)程的CPU使用情況赊琳,二是在CPU Cores區(qū)域街夭,我們可以選擇監(jiān)控指定的單個(gè)Core。
  2. Memory
    • 各指標(biāo)項(xiàng)中躏筏,usedperc(默認(rèn))和freeperc兩項(xiàng)的數(shù)值代表與總內(nèi)存的百分比板丽,其余指標(biāo)項(xiàng)的數(shù)值都是指內(nèi)存大小,選中對(duì)應(yīng)想趁尼,可以看到Metric Unit區(qū)域單位配置將變?yōu)榭捎冒<睿ǔb會(huì)比較適合觀察。
    • 同樣弱卡,也可以選擇監(jiān)控指定進(jìn)程的數(shù)據(jù)
  3. Disk I/O:
    • 各指標(biāo)項(xiàng)中乃正,queue(默認(rèn))的數(shù)值代表等待I/O隊(duì)列長(zhǎng)度,reads婶博、writes分別代表每秒處理的讀/寫(xiě)次數(shù)瓮具,readbyteswritebytes顧名思義凡人,代表每秒讀/寫(xiě)的數(shù)據(jù)量名党,單位同樣在Metric Unit區(qū)域配置,通常Mb會(huì)比較適合觀察挠轴。
      • 如果有掛載多個(gè)存儲(chǔ)設(shè)備传睹,可以在Filesystem Filter區(qū)域指定要監(jiān)控的設(shè)備。

剩下的岸晦,就不一一說(shuō)明了欧啤,參考前面幾項(xiàng),我覺(jué)得理解其他資源類(lèi)型的配置應(yīng)該沒(méi)有問(wèn)題了启上,至于具體指標(biāo)項(xiàng)的含義邢隧,首先用不到的可以暫時(shí)不去了解,如果想要了解冈在,請(qǐng)善用搜索倒慧。

2.2 曲線圖

  1. 使用策略

    • 如果測(cè)試場(chǎng)景的測(cè)試執(zhí)行時(shí)間較長(zhǎng),采集的監(jiān)控?cái)?shù)據(jù)量比較大包券,為了在GUI模式查看曲線圖時(shí)更方便纫谅、快捷,建議將各個(gè)監(jiān)控指標(biāo)項(xiàng)單獨(dú)使用一個(gè)PerfMon監(jiān)聽(tīng)器溅固,從而配置不同的指標(biāo)項(xiàng)數(shù)據(jù)存儲(chǔ)到不同的文件中付秕,測(cè)試執(zhí)行完畢后,載入數(shù)據(jù)和數(shù)據(jù)查看都會(huì)更快侍郭。
      • 如果預(yù)計(jì)數(shù)據(jù)量不會(huì)太大盹牧,可以以服務(wù)器為單位來(lái)劃分PerfMon監(jiān)聽(tīng)器俩垃。這樣可以方便的觀察到整個(gè)測(cè)試過(guò)程中励幼,某臺(tái)服務(wù)器各項(xiàng)資源使用情況的變化趨勢(shì)
      • 對(duì)于分布式服務(wù)汰寓、為了方便觀察各個(gè)節(jié)點(diǎn)的負(fù)載分布、負(fù)載變化趨勢(shì)苹粟,可以考慮將同類(lèi)型的節(jié)點(diǎn)放置到同一個(gè)PerfMon監(jiān)聽(tīng)器有滑,以便對(duì)比觀察
  2. 數(shù)值

    • 當(dāng)一個(gè)PerfMon監(jiān)聽(tīng)器中展示多種指標(biāo)項(xiàng)的數(shù)據(jù)時(shí),為了曲線圖的可觀察性嵌削,插件會(huì)自動(dòng)進(jìn)行優(yōu)化毛好,如圖5所示,我們看到在CPU項(xiàng)和內(nèi)存項(xiàng)都有個(gè)x10苛秕,代表曲線圖中展示的數(shù)值是在采集到的真實(shí)數(shù)值上放大了10倍肌访,目的是為了保證不同數(shù)據(jù)項(xiàng)在同一坐標(biāo)系中展示時(shí),各項(xiàng)都變化趨勢(shì)都能夠被觀察到艇劫。
圖5 曲線圖

圖5 曲線圖

  1. 曲線圖配置
    • 插件界面的Rows標(biāo)簽頁(yè)可以調(diào)整要在曲線圖中展示的指標(biāo)項(xiàng)
    • Setting標(biāo)簽頁(yè)中常用的有
      • use relative times用于配置曲線圖x軸表示相對(duì)時(shí)間(測(cè)試開(kāi)始時(shí)為0)還是實(shí)際系統(tǒng)時(shí)間吼驶。

      • Auto-zoom rows for best fit默認(rèn)勾選,則會(huì)有上一節(jié)講數(shù)值時(shí)提到的展示數(shù)據(jù)自動(dòng)放大的功能店煞,取消勾選則全部展示采集的實(shí)際數(shù)值蟹演。

      • Limit number of points in row to xx points:勾選后可以設(shè)定曲線圖展示的采樣點(diǎn)數(shù)量,我們的測(cè)試報(bào)告會(huì)有不同的角色查看顷蟀,其中一些角色可能不具備也不需要對(duì)監(jiān)控?cái)?shù)據(jù)的細(xì)節(jié)理解能力酒请,此時(shí)我們提供的監(jiān)控曲線圖應(yīng)該是易讀的,如果按照實(shí)際的所有采樣點(diǎn)來(lái)渲染出曲線圖鸣个,可能會(huì)有很多偏離趨勢(shì)的噪點(diǎn)數(shù)據(jù)羞反,這對(duì)于不了解的人來(lái)說(shuō)可能會(huì)有很多疑惑,所以當(dāng)我們有了分析結(jié)論囤萤,最后報(bào)告呈現(xiàn)的時(shí)候昼窗,可以考慮通過(guò)調(diào)整采樣點(diǎn),來(lái)讓曲線圖更好的展示資源使用趨勢(shì)阁将,消除其他不必要的信息膏秫。

        圖6 曲線圖配置

        圖6 曲線圖配置

      • Force maximum Y axis value to xx,實(shí)際上我更多會(huì)選擇不勾選做盅,不勾選的情況下缤削,插件在描繪曲線圖的時(shí)候,會(huì)根據(jù)數(shù)值大小自動(dòng)調(diào)整Y軸最大值吹榴,以達(dá)到更佳可讀性亭敢,如圖7和圖8,分別是不勾選图筹,和勾選后設(shè)置最大值為100時(shí)的曲線圖效果帅刀,顯然圖7可以更容易的觀察到變化的細(xì)節(jié)让腹。不過(guò)與上一項(xiàng)類(lèi)似,可能在對(duì)外出具報(bào)告時(shí)扣溺,為了更少的解釋說(shuō)明骇窍,可能需要某個(gè)指定的數(shù)值。

圖7 不自定義Y軸

圖7 不自定義Y軸

圖8 自定義Y軸

圖8 自定義Y軸

2.3 自定義指標(biāo)

  1. EXEC
    • 在插件界面選擇指標(biāo)類(lèi)型時(shí)锥余,可以看到一個(gè)EXEC選型腹纳,該選項(xiàng)允許我們?cè)诤竺娴腗etric parameter中配置一個(gè)命令語(yǔ)句(該語(yǔ)句最終應(yīng)該輸出單個(gè)數(shù)值),測(cè)試執(zhí)行時(shí)驱犹,ServerAgent將執(zhí)行該命令嘲恍,同時(shí)插件將接收ServerAgent捕獲的輸出數(shù)值。
    • 語(yǔ)法規(guī)則:EXEC所配置的語(yǔ)句需要按照一定的規(guī)則來(lái)填寫(xiě)雄驹,先是給出命令的執(zhí)行程序的位置佃牛,然后將具體的命令以及命令的參數(shù)作為,命令和命令參數(shù)都需要用冒號(hào)”:”來(lái)隔開(kāi)医舆。比如/bin/sh:-c:free |grep Mem |awk '{pring $7}'
      • /bin/sh俘侠,代表命令的執(zhí)行程序
      • -c,即/bin/sh-c選型彬向,有-c選型的情況下兼贡,將從后面的字符串按一定規(guī)則解析為命令和命令參數(shù)
      • 可以看到有用冒號(hào)分隔了執(zhí)行程序/選型參數(shù)/命令語(yǔ)句
      • 對(duì)于windows,也類(lèi)似娃胆,如C\:\Windows\System32\cmd.exe:/c:echo %RANDOM%
  2. TAIL
    • 如同Linux的tail命令遍希,讀取文件的最后一行,用在這里里烦,需要文件每一行只包含一個(gè)單獨(dú)的數(shù)值凿蒜。借助tail,我們可以通過(guò)自定義腳本監(jiān)控任意指標(biāo)胁黑,只需要腳本的輸出滿足要求即可废封。
    • 顯而易見(jiàn),TAIL后面的參數(shù)就是配置要讀取的文件的地址丧蘸,測(cè)試執(zhí)行時(shí)漂洋,ServerAgent將根據(jù)配置讀取所在服務(wù)器的指定文件。

叁.總結(jié)

本文先簡(jiǎn)單的講解了JMeter性能測(cè)試資源監(jiān)控插件的部署力喷,然后從現(xiàn)有指標(biāo)刽漂、曲線圖和自定義指標(biāo)三個(gè)方面講解了插件使用過(guò)程中比較使用的細(xì)節(jié)問(wèn)題,希望通過(guò)本文弟孟,讓大家能靈活運(yùn)用這款插件來(lái)快速實(shí)現(xiàn)自己的測(cè)試需求贝咙。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市拂募,隨后出現(xiàn)的幾起案子庭猩,更是在濱河造成了極大的恐慌窟她,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,591評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蔼水,死亡現(xiàn)場(chǎng)離奇詭異震糖,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)徙缴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)试伙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人于样,你說(shuō)我怎么就攤上這事∨司福” “怎么了穿剖?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,823評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)卦溢。 經(jīng)常有香客問(wèn)我糊余,道長(zhǎng),這世上最難降的妖魔是什么单寂? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,204評(píng)論 1 292
  • 正文 為了忘掉前任贬芥,我火速辦了婚禮,結(jié)果婚禮上宣决,老公的妹妹穿的比我還像新娘蘸劈。我一直安慰自己,他們只是感情好尊沸,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,228評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布威沫。 她就那樣靜靜地躺著,像睡著了一般洼专。 火紅的嫁衣襯著肌膚如雪棒掠。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,190評(píng)論 1 299
  • 那天屁商,我揣著相機(jī)與錄音烟很,去河邊找鬼。 笑死蜡镶,一個(gè)胖子當(dāng)著我的面吹牛雾袱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播帽哑,決...
    沈念sama閱讀 40,078評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼谜酒,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了妻枕?” 一聲冷哼從身側(cè)響起僻族,我...
    開(kāi)封第一講書(shū)人閱讀 38,923評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤粘驰,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后述么,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蝌数,經(jīng)...
    沈念sama閱讀 45,334評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,550評(píng)論 2 333
  • 正文 我和宋清朗相戀三年度秘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了顶伞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,727評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡剑梳,死狀恐怖唆貌,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情垢乙,我是刑警寧澤锨咙,帶...
    沈念sama閱讀 35,428評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站追逮,受9級(jí)特大地震影響酪刀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜钮孵,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,022評(píng)論 3 326
  • 文/蒙蒙 一骂倘、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧巴席,春花似錦历涝、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,672評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至毡证,卻和暖如春电爹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背料睛。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,826評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工丐箩, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人恤煞。 一個(gè)月前我還...
    沈念sama閱讀 47,734評(píng)論 2 368
  • 正文 我出身青樓屎勘,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親居扒。 傳聞我的和親對(duì)象是個(gè)殘疾皇子概漱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,619評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容