LoaRunner性能測試系統(tǒng)學習教程:Tomcat監(jiān)控(2)

上期我們講到LoaRunner性能測試Tomcat結(jié)果體系堰怨,這期我們講LoaRunner性能測試Tomcat監(jiān)控。

Tomcat監(jiān)控

omcat服務(wù)器是一個免費的開放源代碼的Web應(yīng)用服務(wù)器发绢,Tomcat是Apache軟件基金會

(Apache Software Foundation)Jakarta

項目中的一個核心項目,由Apache男韧、Sun和其他一些公司及個人共同開發(fā)而成朴摊。

Tomcat是一個輕量級應(yīng)用服務(wù)器,在中小型系統(tǒng)和并發(fā)訪問用戶的場合下被普遍使用此虑,是開發(fā)和調(diào)試JSP程序的首選甚纲。所以在性能測試過程需要經(jīng)常監(jiān)控Tomcat服務(wù)器。

通常監(jiān)控Tomcat服務(wù)器的方法有以下三種:

第一:使用Tomcat自帶的status頁進行監(jiān)控朦前。

第二:使用Java管理擴展監(jiān)測工具Jconsole進行監(jiān)控介杆。

第三:使用Probe進行監(jiān)控。

將對這三種監(jiān)控方法進行詳細的介紹韭寸。

status頁監(jiān)控

Status頁對Tomcat監(jiān)控的步驟如下:

步驟1:修改配置文件tomcat-users(該文件在Tomcat安裝程序根目錄中的conf文件夾中)春哨,添加一個admin設(shè)置權(quán)限,在中添加的內(nèi)容如下:

<role rolename="admin-gui"/>

<user username="admin" password="1234"?

roles="manager-gui"/>

步驟2:修改完成后恩伺,重啟Tomcat服務(wù)器赴背,在瀏覽器中輸入

URL(http://localhost:8080/)

如果是遠程訪問,訪問的URL為

http://IP:8080

如圖所示晶渠。

在Status Management頁面凰荚,提供幾種監(jiān)控Tomcat的內(nèi)容,主要包括

Server status和Host Manager兩個方面的內(nèi)容褒脯。

Server status主要是顯示服務(wù)器相關(guān)的信息便瑟,主要包括:

Server Information、JVM和接連器相關(guān)的內(nèi)容番川。

Server Information主要是顯示了服務(wù)器配置的相關(guān)信息到涂,如圖所示。

JVM部分主要顯示了JVM的詳細信息颁督,包括JVM總的大小践啄、剩余大小等相關(guān)信息,并統(tǒng)計了每個代所消耗內(nèi)存的情況沉御,當然如果需要看懂這些值往核,就必須和JVM設(shè)置相關(guān)的參數(shù)對照的來看,這樣才可以更好的理解嚷节,當然如果要看詳細的每個時間這個值的變化情況聂儒,這里是無法給到的。

Free memory: 30.38 MB Total memory: 65.60 MB Max memory: 506.31 MB

Free memory:空閑內(nèi)存大辛蛱怠衩婚;

Total memory:總內(nèi)存大小效斑;

Max mermory:最大內(nèi)存大蟹谴骸;

接連器在這里其實有兩種:ajp和http兩種連接器缓屠,我們一般看到多的是http的連接器奇昙,因為一般來說都是通過HTTP來發(fā)送請求的。HTTP連接器的內(nèi)容如圖所示敌完。

Max threads: 300 Current thread count: 10 Current thread busy: 1 Keep alive sockets count: 1

Max processing time: 2357 ms Processing time: 8.778 s Request count: 155 Error count: 2 Bytes received: 0.00 MB Bytes sent: 2.03 MB

Max threads:最大線程數(shù)储耐;

Min spare threads:最小空閑線程數(shù);

Max spare threads:最大空閑線程數(shù)滨溉;

Current thread count:最近運行的線程數(shù)什湘;

thread busy:正在運行的線程數(shù);

Max processing time:最大CPU時間晦攒;

Processing time:CPU消耗總時間闽撤;

Request count:請求總數(shù);

Error count:錯誤的請求數(shù)脯颜;

Bytes received:接收字節(jié)數(shù)哟旗;

Bytes sent:發(fā)送字節(jié)數(shù);

關(guān)于請求階段的有以下幾種情況:

P:表示正準備發(fā)送的請求栋操;

S:表示請求正在服務(wù)器端處理闸餐;

F:表示已經(jīng)完成的請求;

R:表示即將發(fā)送的請求讼庇;

K:表示當前活動的請求绎巨;

Jconsole監(jiān)控

JConsole的圖形用戶界面是一個符合Java管理擴展(JMX)規(guī)范的監(jiān)測工具,JConsole使用Java虛擬機(Java VM)蠕啄,提供在Java平臺上運行的應(yīng)用程序的性能和資源消耗的信息场勤。

在Java平臺,標準版(Java SE平臺)6

JConsole的已經(jīng)更新到目前的外觀歼跟,類似于Windows和GNOME桌面(其他平臺和媳,將目前標準的Java圖形的外觀和感覺),在這個文件中提出的屏幕截圖是從Windows XP上運行的接口的一個實例哈街。

Jconsole是一個可執(zhí)行文件留瞳,在Java根目錄下有一個bin文件,該文件下可以找到j(luò)console文件

單擊可直接運行該程序骚秦,如果將該jconsole的路徑設(shè)置為環(huán)境變量她倘,那么可以直接在開始菜單運行命令中直接鍵jconsole命令璧微,來運行jconsole程序,如果未設(shè)置為環(huán)境變量硬梁,那么則需要寫全路徑前硫。

啟動JConsole程序的方式有兩種:一種是帶參數(shù)的啟動;另外一種是不帶參數(shù)啟動荧止。

帶參數(shù)啟動JConsole啟動時屹电,又分有兩種情況:一種是監(jiān)控本地進程;另一種是遠程監(jiān)控跃巡;

本地監(jiān)控的命令格式如下:

JConsole processID

processID是指應(yīng)用程序的進程ID(PID)危号,可以使用以下方式確定一個應(yīng)用程序的PID:

在UNIX或Linux系統(tǒng),可以使用ps命令找到正在運行的Java實例的PID素邪;

在Windows系統(tǒng)上外莲,可以使用任務(wù)管理器,找到j(luò)ava或者javaw進程的PID娘香;

例如:如果監(jiān)控JConsole程序苍狰,JConsole的進程號為5604,那么可以用下面的命令啟動JConsole:

?JConsole 5604

遠程監(jiān)控的命令格式如下:

JConsole主機名:portNum

主機名是需要監(jiān)聽的主機烘绽,portNum是啟動Java虛擬機時指定的JMX代理的端口號淋昭。

注意:使用JConsole監(jiān)視本地應(yīng)用程序在開發(fā)和創(chuàng)建原型是非常有用的,但不推薦用于生產(chǎn)環(huán)境安接,因為Jconsole本身也消耗大量的系統(tǒng)資源翔忽。

執(zhí)行Jconsole程序時,不帶任何參數(shù)命令盏檐,會彈出Jconsole新建鏈接對話框歇式,如圖所示。

Jconsole有兩種監(jiān)控方式:

本地進程監(jiān)控和遠程監(jiān)控胡野。

選擇本地進程監(jiān)控材失,在下面的列表框中會列出與JConsole程序相同用戶的進程,選擇其中一個進程硫豆,單擊連接按鈕龙巨,即可以進行監(jiān)控的主界面。

選擇遠程監(jiān)控熊响,需要的內(nèi)容包括旨别。主機名和JMX代理的端口號,以及訪問服務(wù)器的用戶名和密碼汗茄。

當連接成功后秸弛,會彈出監(jiān)控界面,如圖所示。

監(jiān)控的內(nèi)容主要包括六個方面的內(nèi)容:

概述递览、內(nèi)存叼屠、線程、類非迹、VM摘要和MBean环鲤。

概要信息

概要信息監(jiān)控界面主要包括堆內(nèi)存使用情況、線程數(shù)憎兽、Java VM中加載類和CPU使用情況。選中各視圖可以切換監(jiān)控的時間片段吵冒,同時也可以將視圖中的數(shù)據(jù)保存在一個逗號分隔(CSV)文件中纯命。

內(nèi)存信息

內(nèi)存監(jiān)控信息主要提供了內(nèi)存消耗和內(nèi)存池的信息,如圖所示痹栖。

內(nèi)存監(jiān)控信息主要監(jiān)控了兩類內(nèi)存消耗的信息:堆和非堆內(nèi)存亿汞,這兩種內(nèi)存也是Java虛擬機管理的兩種內(nèi)存,這兩者都是Java虛擬機啟動時創(chuàng)建的揪阿。??

堆內(nèi)存是運行時數(shù)據(jù)區(qū)域疗我,JavaVM的所有類實例和數(shù)組分配內(nèi)存,可能是固定或可變大小的堆南捂。??

非堆內(nèi)存包括在所有線程和Java虛擬機內(nèi)部處理或優(yōu)化所需的共享的方法吴裤。它存儲了類的結(jié)構(gòu)、運行常量池溺健、字段和方法數(shù)據(jù)麦牺,以及方法和構(gòu)造函數(shù)的代碼,方法區(qū)在邏輯上是堆的一部分总寻,看具體實現(xiàn)的方式烤惊。根據(jù)實現(xiàn)方式的不同茎匠,Java虛擬機可能不進行垃圾收集或壓縮。與堆內(nèi)存一樣吱晒,方法區(qū)域可能是一個固定或可變大小,方法區(qū)的內(nèi)存不需要是連續(xù)的沦童。??

除了方法區(qū)仑濒,Java虛擬機可能需要進行內(nèi)部處理或優(yōu)化,這也屬于非堆內(nèi)存的內(nèi)存搞动。例如躏精,實時(JIT)編譯器需要內(nèi)存用于存儲從Java虛擬機的高性能的代碼翻譯的機器碼。??

Jconsole提供的監(jiān)控的堆和非堆的內(nèi)存主要包括以下幾類:??

EdenSpace內(nèi)存池:大多數(shù)對象初始化時分配的內(nèi)存池鹦肿;??

SurvivorSpace內(nèi)存池:這個內(nèi)存池包含的對象是回收EdenSpace內(nèi)存池后所幸存的對象矗烛;??

TenuredGen內(nèi)存池:這個內(nèi)存池包含的對象是在SurvivorSpace內(nèi)存池中已經(jīng)存在一段時間的對象;??

CodeCache內(nèi)存池:包括HotSpotJavaVM的代碼緩存和編譯、存儲代碼所消耗的內(nèi)存瞭吃;??

PermGen[shared-rw]內(nèi)存池:PermGen內(nèi)存池中讀寫的區(qū)域碌嘀;??

PermGen[shared-ro]內(nèi)存池:PermGen內(nèi)存池中只讀的區(qū)域;??

PermGen內(nèi)存池:該內(nèi)存池包括虛擬機本身反射的數(shù)據(jù)歪架,如類和方法股冗,Java虛擬機在運行時會共享這些類數(shù)據(jù)區(qū)域,共享的區(qū)域有只讀和讀寫兩種方式和蚪。?

在圖表下拉列表框中可以選擇不同內(nèi)存池進行監(jiān)控止状,并獲得當前內(nèi)存池所消耗的內(nèi)存信息,此外右下角顯示了堆和非堆的圖標攒霹,切換顯示的圖表怯疤,內(nèi)存池圖表顯示的內(nèi)容也隨著切換,如果顯示為紅色催束,那說明使用的內(nèi)存超過內(nèi)存的閥值集峦。


內(nèi)存池和內(nèi)存管理器是Java虛擬機的內(nèi)存系統(tǒng)的關(guān)鍵環(huán)節(jié)。??

一個內(nèi)存池表示Java虛擬機管理的內(nèi)存區(qū)域抠刺。Java虛擬機至少有一個內(nèi)存池塔淤,它可能在執(zhí)行過程中創(chuàng)建或刪除內(nèi)存池,一個內(nèi)存池可以屬于堆或非堆內(nèi)存速妖。??

一個內(nèi)存管理器管理一個或多個內(nèi)存池高蜂,垃圾收集器是一個負責回收不可達的對象使用內(nèi)存的內(nèi)存管理器,Java虛擬機可能有一個或更多的內(nèi)存管理器买优,在執(zhí)行過程中妨马,它可以添加或刪除內(nèi)存管理器,一個內(nèi)存池可以由一個以上的內(nèi)存管理器進行管理杀赢。??

“詳細信息”框中顯示了內(nèi)存使用的詳細信息烘跺,主要包括以下信息:??

已使用:當前使用的內(nèi)存數(shù),包括已經(jīng)使用的脂崔、可獲得或未獲得的內(nèi)存滤淳;??

分配:分配的內(nèi)存必須保證Java虛擬機所需要的使用量,提交的內(nèi)存可能會隨時間的改變而改變砌左,Java虛擬機可能會釋放系統(tǒng)內(nèi)存脖咐,分配的內(nèi)存可能會少于最初啟動時分配的內(nèi)存量,分配的內(nèi)存大于或等于需要使用的內(nèi)存量汇歹。??

最大值:內(nèi)存管理中可用的最大內(nèi)存屁擅,該值是變化的或不確定的,如果Java虛擬機使用的內(nèi)存在不斷的增長并且大于所分配的內(nèi)存量产弹,那么分配內(nèi)存將失敗派歌。??

GC時間:累積垃圾收集的時間和總調(diào)用的時間,它可能包含多行,其中每行代表一個垃圾收集器算法在Java虛擬機中所消耗的時間胶果。??

垃圾收集(GCGarbageCollect)是Java虛擬機如何釋放不再被引用的對象所占用的內(nèi)存的機制匾嘱,它通常認為的對象,有當前活動的“活著”的對象和無法引用或不獲得“死”對象早抠,垃圾收集是由釋放“死”對象所占用內(nèi)存的過程霎烙,垃圾收集的算法和參數(shù)對性能有很大的影響。??

JavaHotSpot虛擬機的垃圾收集器使用代GC蕊连,代GC的優(yōu)勢大多數(shù)都符合以下的概括:??

它們創(chuàng)建一些短暫一生的對象悬垃,如迭代和局部變量;??

它們創(chuàng)建一些長生命的對象甘苍,如高層次的持久對象盗忱;??

代GC分為幾代,并給每個指定一個或多個內(nèi)存池羊赵,當一代使用了分配的內(nèi)存,虛擬機上執(zhí)行一個局部的GC(也叫minorcollection)扇谣,內(nèi)存池回收死對象使用的內(nèi)存昧捷,這部分的GC速度通常遠遠優(yōu)于一個完整的GC。?


JavaHotSpot虛擬機定義了兩代:年輕代(有時也被稱為“托兒所”)和年老代罐寨,年輕代包括一個

“Edenspace”

“survivorspaces”

最初靡挥,VM將所有的對象在“Edenspace”內(nèi)存池中,并且大多數(shù)對象“死”在那里鸯绿,當它執(zhí)行了一次局部GC(minorGC)

VM將剩余的對象從“Edenspace”轉(zhuǎn)移到“survivorspaces”跋破,虛擬長生存時間的對象移動到年老代的“tenured”空間,當年老代填滿了瓶蝴,將是一個完整的GC毒返,一個完整的GC往往會很慢,因為它涉及到所有存活的對象舷手,永久代包含虛擬機所有本身數(shù)據(jù)的反射拧簸,如類和方法。??

如果垃圾收集器出現(xiàn)瓶頸男窟,那么可以通過自定義代大小來提高性能盆赤。??

線程信息??

線程的監(jiān)控信息如圖所示。

在左下角“線程”列表中顯示了所有活動的線程歉眷,如果需要查找指定的線程牺六,可以在“過濾器”字段中輸入待查找的線程,選中某個線程汗捡,右邊文本框即會顯示出當前線程的名稱淑际、狀態(tài)和堆棧跟蹤信息。

上面的線程數(shù)目視圖中動態(tài)的顯示當前活動線程數(shù),主要包括兩部分內(nèi)容:當前活動線程數(shù)和峰值線程數(shù)庸追。

線程監(jiān)控視圖中還提供了一個檢測死鎖線程的功能霍骄,單擊【檢測到死鎖】按鈕,如果存在任何線程對象監(jiān)視器出現(xiàn)死鎖情況淡溯,則會顯示出該死鎖線程的ID號读整,并且會顯示出當前線程的相關(guān)信息。

在MBean選項卡中可以監(jiān)視Java虛擬機線程信息的所有屬性和操作咱娶。

類信息

類的監(jiān)控信息如圖所示米间。

已裝入類的數(shù)目視圖中顯示了已裝入類的總數(shù)和當前加載的類,其實紅色表示已裝入類的總數(shù)膘侮,藍線當前加載的類屈糊。詳細信息中顯示了當前已裝入的類、已裝入類的總數(shù)和已卸載類的總數(shù)琼了。

VM摘要信息

VM摘要的監(jiān)控信息如圖所示逻锐。

在VM摘要信息中主要包括五方面的信息:摘要信息、線程和類信息雕薪、內(nèi)存信息昧诱、操作系統(tǒng)信息和其它信息。??

摘要部分的信息主要包括以下信息:??

連接名稱:連接監(jiān)控時的進程PID信息所袁;??

運行時間:開始以來Java虛擬機運行的時間總額盏档;??

處理CPU時間:JavaVM的開始,消耗的CPU時間總量燥爷;??

編譯總時間:累計時間花費在JIT編譯所花費的時間蜈亩;??

線程和類信息主要包括以下信息:??

活動線程:當前活動的線程;??

峰值:最大線程數(shù)前翎;??

守護線程:即運行在后臺的線程稚配;??

已啟動的線程總數(shù):運行到目前為止共啟動的線程數(shù);??

當前類已裝入:當前正在運行過程中已裝載類的總數(shù)鱼填;??

已裝入類的總數(shù):運行到目前為止所裝載類的總數(shù)药有;??

已卸載類的總數(shù):運行到目前為止已卸載類的總數(shù);??

內(nèi)存信息主要包括以下信息:??

當前堆大衅煌琛:當前堆分配的內(nèi)存空間愤惰;??

分配的內(nèi)存:當前已分配的內(nèi)存大小赘理;??

堆大小的最大值:對分配內(nèi)存的最大值宦言;??

暫掛結(jié)束操作:當前暫時掛起結(jié)束的對象;??

垃圾收集器:垃圾收集器描述了收集器的名稱商模、收集器收集的內(nèi)存數(shù)量和收集這些內(nèi)存所消費的時間奠旺;

操作系統(tǒng)信息主要包括操作系統(tǒng)名蜘澜、體系結(jié)構(gòu)、分配的虛擬內(nèi)存响疚、物理內(nèi)存總量鄙信、可用物理內(nèi)存、交換空間總量和可用交換空間忿晕。


其它信息主要包括以下信息:??

VM參數(shù):顯示通過應(yīng)用程序傳送給Java虛擬機的參數(shù)装诡,這些參數(shù)不包括的主要方法的參數(shù);??

類路徑:由系統(tǒng)類加載器用于搜索類文件的類路徑践盼;??

庫路徑:加載庫時要搜索的路徑列表鸦采;??

引導類路徑:引導類加載器搜索類文件的路徑列表;??

MBean信息??

MBeans選項卡顯示MBean服務(wù)器所注冊的MBeans的類咕幻,MBeans選項卡允許訪問平臺MXBean服務(wù)器渔伯,此外,還可以監(jiān)控和管理應(yīng)用程序的MBean肄程,MBean信息如圖所示锣吼。

左側(cè)顯示了當前所以運行的MBean,當選中MBean樹中某個MBean時蓝厌,右側(cè)會顯示當前被選中MBean的MBeanInfo和描述符信息吐限,在下面會顯示當前MBean的相關(guān)屬性、操作和通知信息褂始。

MBean屬性

在MBean樹中選擇一個MBean,單擊“屬性”節(jié)點描函,將顯示MBean的所有屬性崎苗,以Memory為例,如圖所示舀寓。

選中屬性下面的單個屬性胆数,在右側(cè)會顯示出當前屬性的詳細信息,如圖所示互墓。

單擊屬性值(即右側(cè)黑體字)必尼,可以展開詳細的屬性值信息,?HeapMemoryUsage屬性展開后的值篡撵,如圖所示判莉。

雙擊屬性值,可以對這些顯示的值進行修改育谬,有的屬性是以圖表的方式顯示券盅,如圖顯示的是Threading中的CurrentThreadUserTime屬性值。

Mbean操作

在MBean樹中選擇一個MBean膛檀,單擊“操作”節(jié)點锰镀,將顯示MBean的所有相關(guān)操作娘侍,以Threading為例,如圖所示泳炉。

單擊操作調(diào)用中的按鈕憾筏,可以調(diào)用這些方法,單擊某種方法可以顯示當前方法的詳細信息花鹅,如所示氧腰。

Mbean通知

在MBean樹中選擇一個MBean,單擊“通知”節(jié)點翠胰,選擇某個通知容贝,右側(cè)將顯示該通知的詳細信息,以Memory為例之景,如圖所示斤富。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市锻狗,隨后出現(xiàn)的幾起案子满力,更是在濱河造成了極大的恐慌,老刑警劉巖轻纪,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件油额,死亡現(xiàn)場離奇詭異,居然都是意外死亡刻帚,警方通過查閱死者的電腦和手機潦嘶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來崇众,“玉大人掂僵,你說我怎么就攤上這事∏旮瑁” “怎么了锰蓬?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長眯漩。 經(jīng)常有香客問我芹扭,道長,這世上最難降的妖魔是什么赦抖? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任舱卡,我火速辦了婚禮,結(jié)果婚禮上队萤,老公的妹妹穿的比我還像新娘灼狰。我一直安慰自己,他們只是感情好浮禾,可當我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布交胚。 她就那樣靜靜地躺著份汗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蝴簇。 梳的紋絲不亂的頭發(fā)上杯活,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天,我揣著相機與錄音熬词,去河邊找鬼旁钧。 笑死,一個胖子當著我的面吹牛互拾,可吹牛的內(nèi)容都是我干的歪今。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼颜矿,長吁一口氣:“原來是場噩夢啊……” “哼寄猩!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起骑疆,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤田篇,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后箍铭,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體泊柬,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年诈火,在試婚紗的時候發(fā)現(xiàn)自己被綠了兽赁。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡冷守,死狀恐怖闸氮,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情教沾,我是刑警寧澤,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布译断,位于F島的核電站授翻,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏孙咪。R本人自食惡果不足惜堪唐,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望翎蹈。 院中可真熱鬧淮菠,春花似錦、人聲如沸荤堪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至拥知,卻和暖如春踏拜,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背低剔。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工速梗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人襟齿。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓姻锁,卻偏偏與公主長得像,于是被迫代替她去往敵國和親猜欺。 傳聞我的和親對象是個殘疾皇子位隶,可洞房花燭夜當晚...
    茶點故事閱讀 45,440評論 2 359

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