JVM史上最全實(shí)踐優(yōu)化沒有之一

JVM史上最全優(yōu)化沒有之一

1.jvm的運(yùn)行參數(shù)

1.1 三種參數(shù)類型

1.1.1 -server與-clinet參數(shù)

2.1 -X參數(shù)

2.1.1 -Xint给梅、-Xcomp腻豌、-Xmixed

3.1 -XX參數(shù)

4.1 -Xms與-Xmx參數(shù)

5.1 查看jvm的運(yùn)行參數(shù)

5.1.1 運(yùn)行java命令時(shí)打印參數(shù)

6.1 jdk1.7的堆內(nèi)存模型

6.2 jdk1.8的堆內(nèi)存模型

6.3 為什么要廢棄1.7中的永久區(qū)蟹演?

6.4 通過jstat命令進(jìn)行查看堆內(nèi)存使用情況

6.4.1 查看class加載統(tǒng)計(jì)

6.4.2 查看編譯統(tǒng)計(jì)

6.4.3 垃圾回收統(tǒng)計(jì)

7.1 查詢內(nèi)存使用情況

7.2 查看內(nèi)存中對(duì)象數(shù)量及大小

7.3 將內(nèi)存使用情況dump到文件中

7.4 通過jhat對(duì)dump文件進(jìn)行分析

8 jstack的使用

8.1 線程的狀態(tài)

8.2 分析死鎖

8.3 監(jiān)控遠(yuǎn)程的jvm

8.3.1 什么是JMX?

8.3.2 監(jiān)控遠(yuǎn)程的tomcat

1.jvm的運(yùn)行參數(shù)

在jvm中有很多的參數(shù)可以進(jìn)行設(shè)置泽篮,這樣可以讓jvm在各種環(huán)境中都能夠高效的運(yùn)行坊秸。絕大部分的參數(shù)保持默認(rèn)即可唐断。

1.1 三種參數(shù)類型

jvm的參數(shù)類型分為三類,分別是 :

標(biāo)準(zhǔn)參數(shù) :

-help

-version

-X參數(shù)(非標(biāo)準(zhǔn)參數(shù))

-Xint

-Xcomp

-XX參數(shù)(使用率較高)

-XX:newSize

-XX:+UseSerialGC

1.1.1 -server與-clinet參數(shù)

可以通過-server或-client設(shè)置jvm的運(yùn)行參數(shù)杭抠。

(1)它們的區(qū)別是Server VM的初始堆空間會(huì)大一些脸甘,默認(rèn)使用的是并行垃圾回收器,啟動(dòng)慢運(yùn)行快偏灿。

(2)Client VM相對(duì)來講會(huì)保守一些丹诀,初始堆空間會(huì)小一些,使用串行的垃圾回收器翁垂,它的目標(biāo)是為了讓JVM的啟動(dòng)速度更快铆遭,但運(yùn)行速度會(huì)比Server VM模式慢些。

(3)JVM在啟動(dòng)的時(shí)候會(huì)根據(jù)硬件和操作系統(tǒng)自動(dòng)選擇使用Server還是Client類型的JVM沿猜。

(4)32位操作系統(tǒng)

1)如果是Windows系統(tǒng)枚荣,不論硬件配置如何,都默認(rèn)使用Client類型的JVM啼肩。

2)如果是其他操作系統(tǒng)上橄妆,機(jī)器配置有2GB以上的內(nèi)存同時(shí)有2個(gè)以上CPU的話默認(rèn)使用server模式,否則使用client模式祈坠。

(5)64位操作系統(tǒng)

1)只有server類型害碾,不支持client類型。

2.1 -X參數(shù)

jvm的-X參數(shù)是非標(biāo)準(zhǔn)參數(shù)颁虐,在不同版本的jvm中蛮原,參數(shù)可能會(huì)有所不同,可以通過java -X查看非標(biāo)準(zhǔn)參數(shù)另绩。

-Xmixed:混合模式執(zhí)行(默認(rèn))

-Xint:僅解釋模式執(zhí)行

-Xbootclasspath:(用儒陨;分隔的目錄和zip/jar文件)設(shè)置搜索路徑以引導(dǎo)類和資源

-Xbootcalsspath/a:(用;分隔的目錄和zip/jar文件) 附加在引導(dǎo)類路徑末尾

-Xbootcalsspath/p:(用笋籽;分隔的目錄和zip/jar文件)置于引導(dǎo)類路徑之前

-Xdiag :顯示附加診斷消息

-Xnoclassgc :禁用類垃圾收集

-Xincgc : 啟用增量垃圾收集

-Xloggc:<file> : 將GC狀態(tài)記錄在文件中(帶時(shí)間戳)

-Xbatch :禁用后臺(tái)編譯

-Xms<size> : 設(shè)置初始java堆大小

-Xmx<size> : 設(shè)置最大java堆大小

-Xss<size> : 設(shè)置java線程堆棧大小

-Xprof : 輸出cpu配置文件數(shù)據(jù)

-Xfuture : 啟用最嚴(yán)格的檢查蹦漠,預(yù)期將來的默認(rèn)值

-Xrs : 減少java/VM 對(duì)操作系統(tǒng)信號(hào)的使用(請(qǐng)參閱文檔)

-Xcheck:jni : 對(duì)JNI函數(shù)執(zhí)行其他檢查

-Xshare:off : 不嘗試使用共享類數(shù)據(jù)

-Xshare:auto : 在可能的情況下使用共享類數(shù)據(jù)(默認(rèn))

-Xshare:on : 要求使用共享類數(shù)據(jù),否則將失敗

-XshowSettings:all : 顯示所有設(shè)置并繼續(xù)

-XshowSettings:vm : 顯示所有與vm相關(guān)的設(shè)置并繼續(xù)

-XshowSettings:properties : 顯示所有屬性設(shè)置并繼續(xù)

-XshowSetting:locale : 顯示所有與區(qū)域設(shè)置相關(guān)的設(shè)置并繼續(xù)

2.1.1 -Xint车海、-Xcomp笛园、-Xmixed

在解釋模式(interpreted mode)下,-Xint標(biāo)記會(huì)強(qiáng)制JVM執(zhí)行所有的字節(jié)碼侍芝,當(dāng)然這會(huì)降低運(yùn)行速度研铆,通常低10倍或更多。

(編譯比較快州叠,運(yùn)行比較慢)

-Xcomp參數(shù)與它(-Xint)正好相反棵红,JVM在第一次使用時(shí)會(huì)把所有的字節(jié)碼編譯成本地代碼,從而帶來最大程度的優(yōu)化咧栗。

然而逆甜,很多應(yīng)用在使用-Xcomp也會(huì)有一些性能損失虱肄,當(dāng)然這比使用-Xint損失的少,原因是-Xcomp沒有讓JVM啟用JIT編譯器的全部功能交煞。

JIT編譯器可以對(duì)是否需要編譯做判斷咏窿,如果所有代碼都進(jìn)行編譯的話,對(duì)于一些只執(zhí)行一次的代碼就沒有意義了素征。

(

-Xmixed是混合模式集嵌,將解釋模式與編譯模式進(jìn)行混合使用,由jvm自己決定稚茅,這是jvm默認(rèn)的模式纸淮,也是推薦使用的模式。

3.1 -XX參數(shù)

-xx參數(shù)也是非標(biāo)準(zhǔn)參數(shù)亚享,主要用于jvm的調(diào)優(yōu)和debug操作。

-xx參數(shù)的使用有2種方式绘面,一種是boolean類型欺税,一種是非boolean類型:

boolean類型

格式 :-xx:[+-]<name> 表示啟用或禁用<name>屬性

如 :-xx:+DisableExplicitGC 表示禁用手動(dòng)調(diào)用gc操作,也就是說調(diào)用System.gc()無(wú)效

非boolean類型

格式 :-xx:<name>=<value> 表示<name>屬性的值為<value>

如 :-xx:NewRatio=1 表示新生代和老年代的比值

4.1 -Xms與-Xmx參數(shù)

-Xms與-Xmx分別是設(shè)置jvm的堆內(nèi)存的初始大小和最大大小揭璃。

-Xmx2048m : 等價(jià)于-XX:MaxHeapSize晚凿,設(shè)置JVM最大堆內(nèi)存為2048M。

-Xms512m :等價(jià)于-XX:InitialHeapSize瘦馍,設(shè)置JVM初始堆內(nèi)存為512M歼秽。

適當(dāng)?shù)恼{(diào)整jvm的內(nèi)存大小,可以充分利用服務(wù)器資源情组,讓程序跑的更快燥筷。

5.1 查看jvm的運(yùn)行參數(shù)

有時(shí)候我們需要查看jvm的運(yùn)行參數(shù),這個(gè)需求可能會(huì)存在2中情況:

第一院崇,運(yùn)行java命令時(shí)打印出運(yùn)行參數(shù)肆氓;

第二,查看正在運(yùn)行的java進(jìn)程的參數(shù)底瓣;

5.1.1 運(yùn)行java命令時(shí)打印參數(shù)

運(yùn)行java命令時(shí)打印參數(shù)谢揪,需要添加-XX:+PrintFlagsFinal參數(shù)即可。 其中參數(shù)有boolean類型和數(shù)字類型捐凭,值的操作符是=或:=,分別

代表默認(rèn)值和被修改的值拨扶。

查看所有的參數(shù),用法 :jinfo -flags <進(jìn)程id>

通過jps 或者 jps -l 查看java進(jìn)程

查看某一參數(shù)的值茁肠,用法 :jinfo -flag <參數(shù)名> <進(jìn)程id>

6.1 jdk1.7的堆內(nèi)存模型

Young年輕區(qū)(代)

Young區(qū)被劃分為三部分患民,Eden區(qū)和兩個(gè)大小嚴(yán)格相同的Survivor區(qū),其中官套,Survivor區(qū)間中酒奶,某一時(shí)刻只有其中一個(gè)是被

使用的蚁孔,另外一個(gè)留做垃圾收集時(shí)復(fù)制對(duì)象用,在Eden區(qū)間變滿的時(shí)候惋嚎,GC就會(huì)將存活的對(duì)象移到空閑的Survivor區(qū)間中

杠氢,根據(jù)JVM的策略,在經(jīng)過幾次垃圾收集后另伍,任然存活于Survivor的對(duì)象將被移動(dòng)到Tenured區(qū)間鼻百。

Tenured年老區(qū)

Tenured區(qū)主要保存生命周期長(zhǎng)的對(duì)象,一般是一些老的對(duì)象摆尝,當(dāng)一些對(duì)象在Young復(fù)制轉(zhuǎn)移一定的次數(shù)以后温艇, 對(duì)象就會(huì)被

轉(zhuǎn)移到Tenured區(qū),一般如果系統(tǒng)中用了application級(jí)別的緩存堕汞,緩存中的對(duì)象往往會(huì)被轉(zhuǎn)移到這一區(qū)間勺爱。

Perm 永久區(qū)

Perm代主要保存class,method讯检,filed對(duì)象琐鲁,這部分的空間一般不會(huì)溢出,除非一次性加載了很多的類人灼,不過在涉及到熱部

署的應(yīng)用服務(wù)器的時(shí)候围段,有時(shí)候會(huì)遇到j(luò)ava.lang.OutOfMemoryError : PermGen space的錯(cuò)誤,造成這個(gè)錯(cuò)誤的很大原因就

有可能是每次都重新部署投放,但是重新部署后奈泪,類的class沒有被卸載掉,這樣就造成了大量的class對(duì)象保存在了perm中灸芳,這

種情況下涝桅,一般重新啟動(dòng)應(yīng)用服務(wù)器可以解決問題。

Virtual區(qū)

最大內(nèi)存和初始內(nèi)存的差值耗绿,就是Virtual區(qū)苹支。

6.2 jdk1.8的堆內(nèi)存模型

由上圖可以看出,jdk1.8的內(nèi)存模型是由2部分組成误阻,年輕代 + 年老代债蜜。

年輕代 :Eden + 2 * Survivor

年老代 :OldGen

在jdk1.8中變化最大的Perm區(qū),用Metaspace(元數(shù)據(jù)空間)進(jìn)行了替換究反。

需要特別說明的是 :Metaspace所占用的內(nèi)存空間不是在虛擬機(jī)內(nèi)部寻定,而是在本地內(nèi)存空間中,這也是與1.7的永久代最大的

區(qū)別所在精耐。

6.3 為什么要廢棄1.7中的永久區(qū)狼速?

移除永久代是為融合HotSpot JVM與JRockit VM而做出的努力,因?yàn)镴Rockit沒有永久代卦停,不需要配置永久代向胡。

現(xiàn)實(shí)使用中恼蓬,由于永久代內(nèi)存經(jīng)常不夠用或發(fā)生內(nèi)存泄漏,爆出異常java.lang.OutOfMemoryError : PermGen.

基于此僵芹,將永久區(qū)廢棄处硬,而改元空間,改為了使用本地內(nèi)存空間拇派。

6.4 通過jstat命令進(jìn)行查看堆內(nèi)存使用情況

jstat命令可以查看堆內(nèi)存各部分的使用量荷辕,以及加載類的數(shù)量。命令的格式如下 :

jstat[-命令選項(xiàng)][vmid][間隔時(shí)間/毫秒][查詢次數(shù)]

6.4.1 查看class加載統(tǒng)計(jì)

說明 :

Loaded : 加載class的數(shù)量

Bytes : 所占用空間大小

Unloaded : 未加載數(shù)量

Bytes : 未加載占用空間

Time : 時(shí)間

6.4.2 查看編譯統(tǒng)計(jì)

jstat -compiler?

說明 :

Compiled : 編譯數(shù)量

Failed : 失敗數(shù)量

Invalid : 不可用數(shù)量

Time : 時(shí)間

FailedType : 失敗類型

FailedMethod : 失敗的方法

6.4.3 垃圾回收統(tǒng)計(jì)

jstat -gc?

也可以指定打印的間隔和次數(shù)件豌,每1秒中打印一次疮方,共打印5次

jstat -gc 1000 5

說明 :

S0C : 第一個(gè)Survivor區(qū)的大小(KB)

S1C : 第二個(gè)Survivor區(qū)的大屑胪(KB)

S0U : 第一個(gè)Survivor區(qū)的使用大新庀浴(KB)

S1U : 第二個(gè)Survivor區(qū)的使用大小(KB)

EC : Eden區(qū)的大屑帧(KB)

EU : Eden區(qū)的使用大畜⊙巍(KB)

OC : Old區(qū)大小(KB)

OU : Old使用大性庋场(KB)

MC :方法區(qū)大小(KB)

MU :方法區(qū)使用大胁┲(KB)

CCSC :壓縮類空間使用大邢瘴邸(KB)

CCSU :壓縮類空間使用大小(KB)

YGC :年輕代垃圾回收次數(shù)

YGCT :年輕代垃圾回收消耗時(shí)間

FGC :老年代垃圾回收次數(shù)

FGCT : 老年代垃圾回收消耗時(shí)間

GCT :垃圾回收消耗總時(shí)間

7.1 查詢內(nèi)存使用情況

前面通過jstat可以對(duì)jvm堆的內(nèi)存進(jìn)行統(tǒng)計(jì)分析富岳,而jmap可以獲取到更加詳細(xì)的內(nèi)容蛔糯,如 :內(nèi)存使用情況的匯總、對(duì)內(nèi)存溢出的定位與分析窖式。

查看內(nèi)存使用情況 :

jmap -heap <vmid>

7.2 查看內(nèi)存中對(duì)象數(shù)量及大小

查看所有對(duì)象蚁飒,包括活躍以及非活躍的

jmap -histo <pid> | more

查看活躍對(duì)象

jmap -histo:live <pid> | more

對(duì)象說明 :

B : byte

C : char

D : double

F : float

I : int

J : long

Z : boolean

[ :數(shù)組,如[I表示int[]

[L+類名 :其他對(duì)象

7.3 將內(nèi)存使用情況dump到文件中

有些時(shí)候我們需要將jvm當(dāng)前內(nèi)存中的情況dump到文件中萝喘,然后對(duì)它進(jìn)行分析淮逻,jmap也是支持dump到文件中的。

用法 :

jmap -dump:format=b,file=dumpFileName <pid>

其中b是代表二進(jìn)制

示例 :

jmap -dump:format=b,file=/tmp/dump.dat 6219

7.4 通過jhat對(duì)dump文件進(jìn)行分析

用法 :

jhat -port <port> <file>

例如 :

jhat -port 9999 /test/dump.dat

這個(gè)時(shí)候就可以打開瀏覽器訪問 :127.0.0.2:9999

-Xms8m -Xmx8m -XX:+HeapDumpOnOutOfMemoryError : 設(shè)置初始堆大小和當(dāng)發(fā)生內(nèi)存溢出時(shí)阁簸,給內(nèi)存一個(gè)快照并導(dǎo)出一個(gè)dump文件

用MAT進(jìn)行文件分析

8 jstack的使用

有些時(shí)候我們需要查看下jvm中的線程執(zhí)行情況爬早,比如,發(fā)現(xiàn)服務(wù)器的CPU的負(fù)載突然增高了启妹、出現(xiàn)了死鎖筛严、死循環(huán)等,我們

如何分析呢饶米?

由于程序是正常運(yùn)行的桨啃,沒有任何的輸出车胡,從日志方面也看不出什么問題,所以就需要看下jvm的內(nèi)部線程的執(zhí)行情況照瘾,然后

再進(jìn)行分析查找出原因匈棘。

這個(gè)時(shí)候,就需要借助于jstack命令了网杆,jstack的作用是將正在運(yùn)行的jvm的線程情況進(jìn)行快照羹饰,并且打印出來 :

用法 :jstack <pid>

8.1 線程的狀態(tài)

在java中線程的狀態(tài)一共被分成6種 :

初始態(tài)(NEW)

創(chuàng)建一個(gè)Thread對(duì)象,但還未調(diào)用start()啟動(dòng)線程時(shí)碳却,線程處于初始態(tài)队秩。

運(yùn)行態(tài)(RUNNABLE),在java中昼浦,運(yùn)行態(tài)包括就緒態(tài)和運(yùn)行態(tài)馍资。

就緒態(tài)

該狀態(tài)下的線程已經(jīng)獲得執(zhí)行所需的所有資源,只要CPU分配執(zhí)行權(quán)就能運(yùn)行关噪。

所有就緒態(tài)的線程存放在就緒隊(duì)列中鸟蟹。

運(yùn)行態(tài)

獲得CPU執(zhí)行權(quán),正在執(zhí)行的線程使兔。

由于一個(gè)CPU同一時(shí)刻只能執(zhí)行一條線程建钥,因此每個(gè)CPU每個(gè)時(shí)刻只有一條運(yùn)行態(tài)的線程。

阻塞態(tài)(BLOCKED)

當(dāng)一條正在執(zhí)行的線程請(qǐng)求某一資源失敗時(shí)虐沥,就會(huì)進(jìn)入阻塞態(tài)熊经。

而在java中,阻塞態(tài)專指請(qǐng)求鎖失敗時(shí)進(jìn)入的狀態(tài)欲险。

由一個(gè)阻塞隊(duì)列存放所有阻塞態(tài)的線程镐依。

處于阻塞態(tài)的線程會(huì)不斷請(qǐng)求資源,一旦請(qǐng)求成功天试,就會(huì)進(jìn)入就緒隊(duì)列槐壳,等待執(zhí)行。

等待態(tài)(WAITING)

當(dāng)前線程中調(diào)用wait喜每、join务唐、park函數(shù)時(shí),當(dāng)前線程就會(huì)進(jìn)入等待態(tài)灼卢。

也有一個(gè)等待隊(duì)列存放所有等待態(tài)的線程绍哎。

線程處于等待態(tài)表示它需要等待其他線程的指示才能繼續(xù)運(yùn)行。

進(jìn)入等待態(tài)的線程會(huì)釋放CPU執(zhí)行權(quán)鞋真,并釋放資源(如 :鎖)崇堰。

超時(shí)等待態(tài)(TIMED_WAITING)

當(dāng)運(yùn)行中的線程調(diào)用sleep(time)、wait海诲、join、parkNanos特幔、parkUntil時(shí),就會(huì)進(jìn)入該狀態(tài)蚯斯;

它和等待態(tài)一樣,并不是因?yàn)檎?qǐng)求不到資源拍嵌,而是主動(dòng)進(jìn)入,并且進(jìn)入后需要其他線程喚醒横辆;

進(jìn)入該狀態(tài)后釋放CPU執(zhí)行權(quán)和占有的資源撇他。

與等待態(tài)的區(qū)別:到了超時(shí)時(shí)間后自動(dòng)進(jìn)入阻塞隊(duì)列,開始競(jìng)爭(zhēng)鎖狈蚤。

終止態(tài)(TERMINATED)

線程執(zhí)行結(jié)束后的狀態(tài)困肩。

8.2 分析死鎖

在運(yùn)行的程序中,通過命令窗口查看當(dāng)前正在執(zhí)行的線程id

jps

同通過jstack進(jìn)行分析 :

jstack <vmid>

在輸出的信息中脆侮,已經(jīng)看到锌畸,發(fā)現(xiàn)了1個(gè)死鎖,關(guān)鍵看這個(gè) :

可以清晰的看到 :

Thread2 獲取了<0x00000000f655dc50>的鎖靖避,等待獲取<0x00000000f655dc40>這個(gè)鎖

Thread1 獲取了<0x00000000f655dc40>的鎖蹋绽,等待獲取<0x00000000f655dc50>這個(gè)鎖

由此可見,發(fā)生了死鎖筋蓖。

可以使用VisualVM工具進(jìn)行JVM問題的排查

8.3 監(jiān)控遠(yuǎn)程的jvm

VisualJVM不僅是可以監(jiān)控本地jvm進(jìn)程,還可以監(jiān)控遠(yuǎn)程的jvm進(jìn)程退敦,需要借助于JMX技術(shù)實(shí)現(xiàn)粘咖。

8.3.1 什么是JMX?

JMX(Java Management Extensions侈百,即Java管理擴(kuò)展)是一個(gè)為應(yīng)用程序瓮下、設(shè)備、系統(tǒng)等植入管理功能的框架钝域,JMX可以跨越一系列操作

平臺(tái)讽坏、系統(tǒng)體系結(jié)構(gòu)和網(wǎng)絡(luò)傳輸協(xié)議,靈活的開發(fā)無(wú)縫集成的系統(tǒng)例证、網(wǎng)絡(luò)和服務(wù)管理應(yīng)用路呜。

8.3.2 監(jiān)控遠(yuǎn)程的tomcat

想要監(jiān)控遠(yuǎn)程的tomcat,就需要在遠(yuǎn)程的tomcat進(jìn)行對(duì)JMX配置,方法如下 :

#在tomcat的bin目錄下胀葱,修改catalina.sh漠秋,添加如下的參數(shù)

JAVA_OPTS="

-Dcom.sun.management.jmxremote

-Dcom.sun.management.jmxremote.port=9999

-Dcom.sun.management.jmxremote.authenticate=false

-Dcom.sun.management.jmremote.ssl=false"

這幾個(gè)參數(shù)的意思是 :

#-Dcom.sun.management.jmxremote : 允許使用JMX遠(yuǎn)程管理

#-Dcom.sun.management.jmxremote.port=9999? : JMX遠(yuǎn)程連接端口

#-Dcom.sun.management.jmxremote.authenticate=false : 不進(jìn)行身份認(rèn)證,任何用戶都可以連接

#-Dcom.sun.management.jmremote.ssl=false : 不使用ssl

設(shè)置好以后保存抵屿,并重啟tomcat

./startup.sh && tail -f ../logs/catalina.out? :? 重啟tomcat并顯示啟動(dòng)日志

通過VisualVM進(jìn)行遠(yuǎn)程連接庆锦。

SpringBoot項(xiàng)目是內(nèi)嵌的tomcat配置方式查看http://www.360doc.com/content/17/1018/20/16915_696185383.shtml

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末轧葛,一起剝皮案震驚了整個(gè)濱河市尿扯,隨后出現(xiàn)的幾起案子姜胖,更是在濱河造成了極大的恐慌右莱,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異晨抡,居然都是意外死亡耘柱,警方通過查閱死者的電腦和手機(jī)调煎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門悲关,熙熙樓的掌柜王于貴愁眉苦臉地迎上來娄柳,“玉大人赤拒,你說我怎么就攤上這事√纾” “怎么了鹅颊?”我有些...
    開封第一講書人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵锚烦,是天一觀的道長(zhǎng)涮俄。 經(jīng)常有香客問我彻亲,道長(zhǎng)吮廉,這世上最難降的妖魔是什么宦芦? 我笑而不...
    開封第一講書人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任抡砂,我火速辦了婚禮注益,結(jié)果婚禮上溯捆,老公的妹妹穿的比我還像新娘现使。我一直安慰自己碳锈,他們只是感情好售碳,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開白布间景。 她就那樣靜靜地躺著艺智,像睡著了一般十拣。 火紅的嫁衣襯著肌膚如雪夭问。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,806評(píng)論 1 290
  • 那天捧杉,我揣著相機(jī)與錄音味抖,去河邊找鬼非竿。 笑死红柱,一個(gè)胖子當(dāng)著我的面吹牛锤悄,可吹牛的內(nèi)容都是我干的嘉抒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼岗宣!你這毒婦竟也來了耗式?” 一聲冷哼從身側(cè)響起趁猴,我...
    開封第一講書人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎捕犬,沒想到半個(gè)月后浪规,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體笋婿,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡足丢,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年斩跌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了耀鸦。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片袖订。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嗅虏,死狀恐怖皮服,靈堂內(nèi)的尸體忽然破棺而出龄广,到底是詐尸還是另有隱情,我是刑警寧澤舟铜,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布谆刨,位于F島的核電站归斤,受9級(jí)特大地震影響脏里,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜番舆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望禾怠。 院中可真熱鬧贝搁,春花似錦雷逆、人聲如沸膀哲。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)瞻想。三九已至,卻和暖如春滴肿,著一層夾襖步出監(jiān)牢的瞬間泼差,已是汗流浹背堆缘。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工录平, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留缀皱,地道東北人啤斗。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像燃逻,于是被迫代替她去往敵國(guó)和親伯襟。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

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