Java Web之Tomcat調(diào)優(yōu)

Tomcat調(diào)優(yōu)是一個(gè)老話題引谜,目的都是為了提高站點(diǎn)的吞吐和并發(fā)随抠。這里面涉及到Tomcat本身參數(shù)的優(yōu)化和JVM優(yōu)化橙数。近期在研究JVM的參數(shù)設(shè)置和Tomcat集群,所以進(jìn)行了一下調(diào)優(yōu)實(shí)踐作彤。需要說明的是:本文的配置肯定不是最好的,僅僅是一次實(shí)踐和一次記錄乌逐。步驟可以參考竭讳,但參數(shù)設(shè)置需要針對不同需求的項(xiàng)目來進(jìn)行調(diào)整。

1浙踢、安裝APR(Apache Portable Runtime)

Tomcat 7 以后 Connector 默認(rèn)啟用 APR 協(xié)議绢慢,但是只有配置了 APR庫才可以生效,否則還是會使用 BIO 或者NIO方式成黄。如何配置呐芥?可以直接去http://tomcat.apache.org/download-native.cgi下載,里面有32bit和64bit兩種庫奋岁,本人是64位機(jī)器思瘟,所以將x64文件夾下的兩個(gè)文件tcnative-1.dlltcnative-1-src.pdb拷貝到Tomcat的bin目錄下,然后啟動 Tomcat闻伶,如果有如圖所示的輸出滨攻,說明配置成功。

安裝Apr后啟動狀態(tài)變化.PNG

為什么使用Apr蓝翰?

官方如是說(翻譯了一下):Tomcat 可以使用 APR 來提供出色的可伸縮性光绕,性能以及與原生服務(wù)器技術(shù)的更好集成。APR 有許多用途畜份,提供了包括對高級IO功能操作系統(tǒng)級功能和本地進(jìn)程處理的訪問诞帐。這些功能使得Tomcat成為一個(gè)通用的網(wǎng)絡(luò)服務(wù)器,能夠更好地與其他本地網(wǎng)絡(luò)技術(shù)進(jìn)行整合爆雹,并且使整個(gè)Java作為一個(gè)完整的web服務(wù)器平臺更加可行停蕉。

網(wǎng)上有人測試過愕鼓,APR相比較BIO、NIO慧起,在處理高并發(fā)時(shí)效率更高菇晃。

2、配置Executor蚓挤,增加線程數(shù)磺送,提高并發(fā)能力

打開server.xml,找到被注釋的一段

    <Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
            maxThreads="150" minSpareThreads="4"/>

修改成

    <Executor   name="tomcatThreadPool" 
                namePrefix="catalina-exec-"
                maxThreads="500"                 //Tomcat 使用線程來處理請求灿意,該值表示 Tomcat 能創(chuàng)建的最大的線程數(shù)
                minSpareThreads="20"             //最小空閑線程數(shù)估灿,Tomcat 啟動時(shí)的初始化的線程數(shù),表示即使沒有人使用也開這么多空線程等待缤剧,默認(rèn)值是 10甲捏。
                maxIdleTime="60000"/>            //當(dāng)服務(wù)的線程數(shù)超過最大線程數(shù)時(shí),超過maxIdleTime的線程會被殺死回收直到線程數(shù)降低到最大數(shù)以內(nèi)

3鞭执、配置Connector司顿,設(shè)置超時(shí)、上傳和緩存信息

同樣在server.xml中兄纺,修改端口號為 8080 的Connector如下

    <Connector  executor="tomcatThreadPool"     //指明上面的executor
                port="8080" 
                protocol="HTTP/1.1"
                URIEncoding="UTF-8"
                connectionTimeout="30000"       //網(wǎng)絡(luò)連接超時(shí)大溜,設(shè)置為 0 表示永不超時(shí)。單位:毫秒
                enableLookups="false"           //是否反查域名估脆,以返回遠(yuǎn)程主機(jī)的主機(jī)名钦奋,取值為:true 或 false,如果設(shè)置為false疙赠,則直接返回IP地址付材,為了提高處理能力,應(yīng)設(shè)置為 false
                disableUploadTimeout="false"    //上傳時(shí)是否使用超時(shí)機(jī)制
                connectionUploadTimeout="150000"http://上傳超時(shí)時(shí)間
                acceptCount="300"               //指定當(dāng)所有可以使用的處理請求的線程數(shù)都被使用時(shí)圃阳,可傳入連接請求的最大隊(duì)列長度厌衔,超過這個(gè)數(shù)的請求將不予處理
                keepAliveTimeout="120000"       //長連接最大保持時(shí)間,表示在下次請求過來之前捍岳,Tomcat 保持該連接多久富寿,-1 為不限制超時(shí)。單位:毫秒
                maxKeepAliveRequests="1"        //表示在服務(wù)器關(guān)閉之前锣夹,該連接最大支持的請求數(shù)页徐。超過該請求數(shù)的連接也將被關(guān)閉,1表示禁用银萍,-1表示不限制個(gè)數(shù)
                compression="on"                //是否對響應(yīng)的數(shù)據(jù)進(jìn)行 GZIP 壓縮变勇,off:表示禁止壓縮;on:表示允許壓縮(文本將被壓縮)贴唇、force:表示所有情況下都進(jìn)行壓縮搀绣,默認(rèn)值為off
                compressionMinSize="2048"       //表示壓縮響應(yīng)的最小值赃梧,只有當(dāng)響應(yīng)報(bào)文大小大于這個(gè)值的時(shí)候才會對報(bào)文進(jìn)行壓縮,如果開啟了壓縮功能
                compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image/jpg,image/png" //壓縮類型豌熄,指定對哪些類型的文件進(jìn)行數(shù)據(jù)壓縮。
                redirectPort="8443" />

4物咳、打開catalina.bat锣险,打開JAVA_OPTS 進(jìn)行JVM設(shè)置

如何設(shè)置JVM?
1览闰、集成開發(fā)環(huán)境下啟動并使用JVM芯肤,如eclipse需要修改根目錄文件eclipse.ini;
2压鉴、Windows服務(wù)器下安裝版Tomcat崖咨,可使用Tomcatw.exe工具(Tomcat目錄下)和直接修改注冊表兩種方式修改JVM參數(shù);
3油吭、Windows服務(wù)器解壓版Tomcat注冊Windows服務(wù)击蹲,方法同上;
4婉宰、解壓版本的Tomcat, 通過startup.bat啟動Tomcat加載配置的歌豺,在Tomcat的bin 下catalina.bat 文件內(nèi)添加;
5心包、Linux服務(wù)器Tomcat設(shè)置JVM类咧,修改TOMCAT_HOME/bin/catalina.sh;

本人屬于第4種蟹腾,所以打開catalina.bat痕惋,在第二行添加如下信息

set JAVA_OPTS=-server -Xms4G -Xmx4G -Xss512k

5、檢測設(shè)置是否生效

在設(shè)置之前娃殖,訪問Tomcat首頁值戳,點(diǎn)擊Server Status查看相關(guān)信息

未優(yōu)化之前的信息.png

優(yōu)化以后,再次訪問查看炉爆,很明顯發(fā)生了很大變化


優(yōu)化之后的信息.png

參考文獻(xiàn)

1述寡、http://blog.csdn.net/centre10/article/details/50639693
2、http://blog.csdn.net/ldx891113/article/details/51735171

附錄:JVM常用參數(shù)詳解(網(wǎng)絡(luò)摘錄)

-server:一定要作為第一個(gè)參數(shù)叶洞,在多個(gè) CPU 時(shí)性能佳鲫凶,還有一種叫 -client 的模式,特點(diǎn)是啟動速度比較快衩辟,但運(yùn)行時(shí)性能和內(nèi)存管理效率不高螟炫,通常用于客戶端應(yīng)用程序或開發(fā)調(diào)試,在 32 位環(huán)境下直接運(yùn)行 Java 程序默認(rèn)啟用該模式艺晴。Server 模式的特點(diǎn)是啟動速度比較慢昼钻,但運(yùn)行時(shí)性能和內(nèi)存管理效率很高掸屡,適用于生產(chǎn)環(huán)境,在具有 64 位能力的 JDK 環(huán)境下默認(rèn)啟用該模式然评,可以不配置該參數(shù)仅财。

-Xms:表示 Java 初始化堆的大小,-Xms 與-Xmx 設(shè)成一樣的值碗淌,避免 JVM 反復(fù)重新申請內(nèi)存盏求,導(dǎo)致性能大起大落,默認(rèn)值為物理內(nèi)存的 1/64亿眠,默認(rèn)(MinHeapFreeRatio參數(shù)可以調(diào)整)空余堆內(nèi)存小于 40% 時(shí)碎罚,JVM 就會增大堆直到 -Xmx 的最大限制。

-Xmx:表示最大 Java 堆大小纳像,當(dāng)應(yīng)用程序需要的內(nèi)存超出堆的最大值時(shí)虛擬機(jī)就會提示內(nèi)存溢出荆烈,并且導(dǎo)致應(yīng)用服務(wù)崩潰,因此一般建議堆的最大值設(shè)置為可用內(nèi)存的最大值的80%竟趾。如何知道我的 JVM 能夠使用最大值憔购,使用 java -Xmx512M -version 命令來進(jìn)行測試,然后逐漸的增大 512 的值,如果執(zhí)行正常就表示指定的內(nèi)存大小可用岔帽,否則會打印錯誤信息倦始,默認(rèn)值為物理內(nèi)存的 1/4,默認(rèn)(MinHeapFreeRatio參數(shù)可以調(diào)整)空余堆內(nèi)存大于 70% 時(shí)山卦,JVM 會減少堆直到-Xms 的最小限制鞋邑。

-Xss:表示每個(gè) Java 線程堆棧大小,JDK 5.0 以后每個(gè)線程堆棧大小為 1M账蓉,以前每個(gè)線程堆棧大小為 256K枚碗。根據(jù)應(yīng)用的線程所需內(nèi)存大小進(jìn)行調(diào)整,在相同物理內(nèi)存下铸本,減小這個(gè)值能生成更多的線程肮雨,但是操作系統(tǒng)對一個(gè)進(jìn)程內(nèi)的線程數(shù)還是有限制的,不能無限生成箱玷,經(jīng)驗(yàn)值在 3000~5000 左右怨规。一般小的應(yīng)用, 如果棧不是很深锡足, 應(yīng)該是128k 夠用的波丰,大的應(yīng)用建議使用 256k 或 512K,一般不易設(shè)置超過 1M舶得,要不然容易出現(xiàn)out ofmemory掰烟。這個(gè)選項(xiàng)對性能影響比較大,需要嚴(yán)格的測試。

-XX:NewSize:設(shè)置新生代內(nèi)存大小纫骑。

-XX:MaxNewSize:設(shè)置最大新生代新生代內(nèi)存大小
-XX:PermSize:設(shè)置持久代內(nèi)存大小

-XX:MaxPermSize:設(shè)置最大值持久代內(nèi)存大小蝎亚,永久代不屬于堆內(nèi)存,堆內(nèi)存只包含新生代和老年代先馆。

-XX:+AggressiveOpts:作用如其名(aggressive)发框,啟用這個(gè)參數(shù),則每當(dāng) JDK 版本升級時(shí)煤墙,你的 JVM 都會使用最新加入的優(yōu)化技術(shù)(如果有的話)梅惯。

-XX:+UseBiasedLocking:啟用一個(gè)優(yōu)化了的線程鎖,我們知道在我們的appserver番捂,每個(gè)http請求就是一個(gè)線程,有的請求短有的請求長江解,就會有請求排隊(duì)的現(xiàn)象设预,甚至還會出現(xiàn)線程阻塞,這個(gè)優(yōu)化了的線程鎖使得你的appserver內(nèi)對線程處理自動進(jìn)行最優(yōu)調(diào)配犁河。

-XX:+DisableExplicitGC:在 程序代碼中不允許有顯示的調(diào)用“System.gc()”鳖枕。每次在到操作結(jié)束時(shí)手動調(diào)用 System.gc() 一下,付出的代價(jià)就是系統(tǒng)響應(yīng)時(shí)間嚴(yán)重降低桨螺,就和關(guān)于 Xms宾符,Xmx 里的解釋的原理一樣,這樣去調(diào)用 GC 導(dǎo)致系統(tǒng)的 JVM 大起大落灭翔。

-XX:+UseConcMarkSweepGC:設(shè)置年老代為并發(fā)收集魏烫,即 CMS gc,這一特性只有 jdk1.5
后續(xù)版本才具有的功能肝箱,它使用的是 gc 估算觸發(fā)和 heap 占用觸發(fā)哄褒。我們知道頻頻繁的 GC 會造面 JVM
的大起大落從而影響到系統(tǒng)的效率,因此使用了 CMS GC 后可以在 GC 次數(shù)增多的情況下煌张,每次 GC 的響應(yīng)時(shí)間卻很短呐赡,比如說使用了 CMS
GC 后經(jīng)過 jprofiler 的觀察,GC 被觸發(fā)次數(shù)非常多骏融,而每次 GC 耗時(shí)僅為幾毫秒链嘀。

-XX:+UseParNewGC:對新生代采用多線程并行回收,這樣收得快档玻,注意最新的 JVM 版本怀泊,當(dāng)使用 -XX:+UseConcMarkSweepGC 時(shí),-XX:UseParNewGC 會自動開啟误趴。因此包个,如果年輕代的并行 GC 不想開啟,可以通過設(shè)置 >-XX:-UseParNewGC 來關(guān)掉。

-XX:MaxTenuringThreshold:設(shè)置垃圾最大年齡碧囊。如果設(shè)置為0的話树灶,則新生代對象不經(jīng)過 Survivor 區(qū),直接進(jìn)入老年代糯而。對于老年代比較多的應(yīng)用(需要大量常駐內(nèi)存的應(yīng)用)天通,可以提高效率。如果將此值設(shè)置為一 個(gè)較大值熄驼,則新生代對象會在 Survivor 區(qū)進(jìn)行多次復(fù)制像寒,這樣可以增加對象在新生代的存活時(shí)間,增加在新生代即被回收的概率瓜贾,減少Full GC的頻率诺祸,這樣做可以在某種程度上提高服務(wù)穩(wěn)定性。該參數(shù)只有在串行 GC 時(shí)才有效祭芦,這個(gè)值的設(shè)置是根據(jù)本地的 jprofiler 監(jiān)控后得到的一個(gè)理想的值筷笨,不能一概而論原搬照抄。

-XX:+CMSParallelRemarkEnabled:在使用 UseParNewGC 的情況下龟劲,盡量減少 mark 的時(shí)間胃夏。

-XX:+UseCMSCompactAtFullCollection:在使用 concurrent gc 的情況下,防止 memoryfragmention昌跌,對 live object 進(jìn)行整理仰禀,使 memory 碎片減少。

-XX:LargePageSizeInBytes:指定 Java heap 的分頁頁面大小蚕愤,內(nèi)存頁的大小不可設(shè)置過大答恶, 會影響 Perm 的大小。

-XX:+UseFastAccessorMethods:使用 get萍诱,set 方法轉(zhuǎn)成本地代碼亥宿,原始類型的快速優(yōu)化。
-XX:+UseCMSInitiatingOccupancyOnly:只有在 oldgeneration 在使用了初始化的比例后 concurrent collector 啟動收集砂沛。

-Duser.timezone=Asia/Shanghai:設(shè)置用戶所在時(shí)區(qū)烫扼。
-Djava.awt.headless=true:這個(gè)參數(shù)一般我們都是放在最后使用的,這全參數(shù)的作用是這樣的碍庵,有時(shí)我們會在我們的 J2EE 工程中使用一些圖表工具如:jfreechart映企,用于在 web 網(wǎng)頁輸出 GIF/JPG 等流,在 winodws 環(huán)境下静浴,一般我們的 app server 在輸出圖形時(shí)不會碰到什么問題堰氓,但是在linux/unix 環(huán)境下經(jīng)常會碰到一個(gè) exception 導(dǎo)致你在 winodws 開發(fā)環(huán)境下圖片顯示的好好可是在 linux/unix 下卻顯示不出來,因此加上這個(gè)參數(shù)以免避這樣的情況出現(xiàn)苹享。

-Xmn:新生代的內(nèi)存空間大小双絮,注意:此處的大小是(eden+ 2 survivor space)浴麻。與 jmap -heap 中顯示的 New gen 是不同的。整個(gè)堆大小 = 新生代大小 + 老生代大小 + 永久代大小囤攀。在保證堆大小不變的情況下软免,增大新生代后,將會減小老生代大小焚挠。此值對系統(tǒng)性能影響較大膏萧,Sun官方推薦配置為整個(gè)堆的 3/8。

-XX:CMSInitiatingOccupancyFraction:當(dāng)堆滿之后蝌衔,并行收集器便開始進(jìn)行垃圾收集榛泛,例如,當(dāng)沒有足夠的空間來容納新分配或提升的對象噩斟。對于 CMS 收集器曹锨,長時(shí)間等待是不可取的,因?yàn)樵诓l(fā)垃圾收集期間應(yīng)用持續(xù)在運(yùn)行(并且分配對象)剃允。因此沛简,為了在應(yīng)用程序使用完內(nèi)存之前完成垃圾收集周期,CMS 收集器要比并行收集器更先啟動硅急。因?yàn)椴煌膽?yīng)用會有不同對象分配模式覆享,JVM 會收集實(shí)際的對象分配(和釋放)的運(yùn)行時(shí)數(shù)據(jù)佳遂,并且分析這些數(shù)據(jù)营袜,來決定什么時(shí)候啟動一次 CMS 垃圾收集周期。這個(gè)參數(shù)設(shè)置有很大技巧丑罪,基本上滿足(Xmx-Xmn)(100-CMSInitiatingOccupancyFraction)/100 >= Xmn 就不會出現(xiàn) promotion failed荚板。例如在應(yīng)用中 Xmx 是6000,Xmn 是 512吩屹,那么 Xmx-Xmn 是 5488M跪另,也就是老年代有 5488M,CMSInitiatingOccupancyFraction=90 說明老年代到 90% 滿的時(shí)候開始執(zhí)行對老年代的并發(fā)垃圾回收(CMS)煤搜,這時(shí)還 剩 10% 的空間是 548810% = 548M免绿,所以即使 Xmn(也就是新生代共512M)里所有對象都搬到老年代里,548M 的空間也足夠了擦盾,所以只要滿足上面的公式嘲驾,就不會出現(xiàn)垃圾回收時(shí)的 promotion failed,因此這個(gè)參數(shù)的設(shè)置必須與 Xmn 關(guān)聯(lián)在一起迹卢。

-XX:+CMSIncrementalMode:該標(biāo)志將開啟 CMS 收集器的增量模式辽故。增量模式經(jīng)常暫停 CMS 過程,以便對應(yīng)用程序線程作出完全的讓步腐碱。因此誊垢,收集器將花更長的時(shí)間完成整個(gè)收集周期。因此,只有通過測試后發(fā)現(xiàn)正常 CMS 周期對應(yīng)用程序線程干擾太大時(shí)喂走,才應(yīng)該使用增量模式殃饿。由于現(xiàn)代服務(wù)器有足夠的處理器來適應(yīng)并發(fā)的垃圾收集,所以這種情況發(fā)生得很少缴啡,用于但 CPU情況壁晒。

-XX:NewRatio:年輕代(包括 Eden 和兩個(gè) Survivor 區(qū))與年老代的比值(除去持久代),-XX:NewRatio=4 表示年輕代與年老代所占比值為 1:4业栅,年輕代占整個(gè)堆棧的 1/5秒咐,Xms=Xmx 并且設(shè)置了 Xmn 的情況下,該參數(shù)不需要進(jìn)行設(shè)置碘裕。

-XX:SurvivorRatio:Eden 區(qū)與 Survivor 區(qū)的大小比值携取,設(shè)置為 8,表示 2 個(gè) Survivor 區(qū)(JVM 堆內(nèi)存年輕代中默認(rèn)有 2 個(gè)大小相等的 Survivor 區(qū))與 1 個(gè) Eden 區(qū)的比值為 2:8帮孔,即 1 個(gè) Survivor 區(qū)占整個(gè)年輕代大小的 1/10雷滋。

-XX:+UseSerialGC:設(shè)置串行收集器。

-XX:+UseParallelGC:設(shè)置為并行收集器文兢。此配置僅對年輕代有效晤斩。即年輕代使用并行收集,而年老代仍使用串行收集姆坚。

-XX:+UseParallelOldGC:配置年老代垃圾收集方式為并行收集澳泵,JDK6.0 開始支持對年老代并行收集。

-XX:ConcGCThreads:早期 JVM 版本也叫-XX:ParallelCMSThreads兼呵,定義并發(fā) CMS 過程運(yùn)行時(shí)的線程數(shù)兔辅。比如 value=4 意味著 CMS 周期的所有階段都以 4 個(gè)線程來執(zhí)行。盡管更多的線程會加快并發(fā) CMS 過程击喂,但其也會帶來額外的同步開銷维苔。因此,對于特定的應(yīng)用程序懂昂,應(yīng)該通過測試來判斷增加 CMS 線程數(shù)是否真的能夠帶來性能的提升介时。如果還標(biāo)志未設(shè)置,JVM 會根據(jù)并行收集器中的 -XX:ParallelGCThreads 參數(shù)的值來計(jì)算出默認(rèn)的并行 CMS 線程數(shù)凌彬。

-XX:ParallelGCThreads:配置并行收集器的線程數(shù)沸柔,即:同時(shí)有多少個(gè)線程一起進(jìn)行垃圾回收,此值建議配置與 CPU 數(shù)目相等饿序。

-XX:OldSize:設(shè)置 JVM 啟動分配的老年代內(nèi)存大小勉失,類似于新生代內(nèi)存的初始大小 -XX:NewSize。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末原探,一起剝皮案震驚了整個(gè)濱河市乱凿,隨后出現(xiàn)的幾起案子顽素,更是在濱河造成了極大的恐慌,老刑警劉巖徒蟆,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件胁出,死亡現(xiàn)場離奇詭異,居然都是意外死亡段审,警方通過查閱死者的電腦和手機(jī)全蝶,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寺枉,“玉大人抑淫,你說我怎么就攤上這事±焉粒” “怎么了始苇?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長筐喳。 經(jīng)常有香客問我催式,道長,這世上最難降的妖魔是什么避归? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任荣月,我火速辦了婚禮,結(jié)果婚禮上梳毙,老公的妹妹穿的比我還像新娘哺窄。我一直安慰自己,他們只是感情好顿天,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布堂氯。 她就那樣靜靜地躺著蔑担,像睡著了一般牌废。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上啤握,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天鸟缕,我揣著相機(jī)與錄音,去河邊找鬼排抬。 笑死懂从,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的蹲蒲。 我是一名探鬼主播番甩,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼届搁!你這毒婦竟也來了缘薛?” 一聲冷哼從身側(cè)響起窍育,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎宴胧,沒想到半個(gè)月后漱抓,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡恕齐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年乞娄,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片显歧。...
    茶點(diǎn)故事閱讀 40,488評論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡仪或,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出士骤,到底是詐尸還是另有隱情溶其,我是刑警寧澤,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布敦间,位于F島的核電站瓶逃,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏廓块。R本人自食惡果不足惜厢绝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望带猴。 院中可真熱鬧昔汉,春花似錦、人聲如沸拴清。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽口予。三九已至娄周,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間沪停,已是汗流浹背煤辨。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留木张,地道東北人众辨。 一個(gè)月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像舷礼,于是被迫代替她去往敵國和親鹃彻。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,500評論 2 359

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