12月10日 Linux系統(tǒng)調優(yōu)

1、cpu親緣性綁定

就是將進程綁定在固定的cpu上,提高cpu緩存命中率劫灶。

[root@node1 vusers.d]#ps axo psr,comm,pid #可以查看進程運行在哪顆cpu上
[root@node1 vusers.d]#taskset -p -c 0 2857 #將進程編號為2857的進程綁定到0號cpu上
pid 2857's current affinity list: 0-3
pid 2857's new affinity list: 0
[root@node1 vusers.d]#ps axo psr,comm,pid |grep 2857 #發(fā)現(xiàn)此進程只綁定在0號cpu上了
  0 sshd              2857

2、修改進程的nice優(yōu)先級

[root@node1 vusers.d]#ps axo pid,cmd,nice #查看進程的nice優(yōu)先級
[root@node1 vusers.d]#renice -n -10 10972 #修改進程的優(yōu)先級
10972 (process ID) old priority 0, new priority -10
[root@node1 vusers.d]#ps axo pid,cmd,nice |grep 10972
 10972 /usr/sbin/vsftpd /etc/vsftp -10
nice -n -10 vim f1 指定優(yōu)先級打開某個程序

3掖桦、隔離cpu和中斷

cpu不僅要運行進程還要處理中斷本昏,如果一個進程運行的cpu處理中斷的次數(shù)過多,勢必會影響進程的運行枪汪,為了不影響進程涌穆,可以將cpu進行隔離,比如有4核cpu雀久,可以隔離出2核cpu蒲犬,并和進程進行綁定用于專門運行進程,剩下的兩核處理中斷岸啡,這樣運行進程的cpu就不會處理中斷,提高進程的運行效率
①如何進行cpu隔離

centos6中:vim /etc/grub.conf
在kerner最后加上isolcpus=cpu編號0,1,2,3等赫编,隔離哪顆cpu巡蘸,就寫上哪顆cpu的編號
centos7中:vim /etc/grub2.cfg
在linux16 /vmlinuz-3.10.0-514.el7.x86_64最后加上isolcpus=cpu編號0,1,2,3等

②如何隔離中斷

[root@node1 vusers.d]#cat /proc/interrupts  #可以查看每個cpu處理中斷的次數(shù),比如0號中斷擂送,0號cpu處理了20次
            CPU0       CPU1       CPU2       CPU3       
   0:         20          0          0          0   IO-APIC-edge      timer
   1:         12          0          0          0   IO-APIC-edge      i8042
   8:          1          0          0          0   IO-APIC-edge      rtc0
   9:          0          0          0          0   IO-APIC-fasteoi   acpi
  12:         16          0          0          0   IO-APIC-edge      i8042
  14:          0          0          0          0   IO-APIC-edge      ata_piix
  15:        150          0          0      39853   IO-APIC-edge      ata_piix
  16:        305          0          0          0   IO-APIC-fasteoi   vmwgfx, snd_ens1371
  17:       9412          0       6435          0   IO-APIC-fasteoi   ehci_hcd:usb1, ioc0
  18:        204          0          0          0   IO-APIC-fasteoi   uhci_hcd:usb2
  19:         65          0          0    1083401   IO-APIC-fasteoi   ens33, ens37
如何將所有的中斷都綁定到0,1號cpu上悦荒,這里的cpu編號應該是isolcpus中定義的cpu集合之外的其他cpu,也就是被隔離的cpu運行進程嘹吨,其他的cpu用于處理中斷
[root@node1 0]#cd /proc/irq/1/
[root@node1 1]#ls
affinity_hint  i8042  node  smp_affinity  smp_affinity_list  spurious
[root@node1 1]#cat smp_affinity
00000000,00000000,00000000,00000004
[root@node1 1]#echo 1 >smp_affinity 
[root@node1 1]#cat smp_affinity
00000000,00000000,00000000,00000001

此項一般也不進行設定搬味,知道就可以。

4蟀拷、內存優(yōu)化

  • 內存的過量使用
    echo 1 > /proc/sys/vm/overcommit_memory #用于設定是否可以過量使用內存
    0:是默認值碰纬,內核執(zhí)行啟發(fā)式內存過量使用處理,方法是估算可用內存量问芬,并且拒絕明顯無效的請求悦析,遺憾的是因為內存是使用啟發(fā)式而非準確算法計算進行部署,這個設置有時可能會造成系統(tǒng)中的可用內存超載此衅,相當于自動模式
    1:內核執(zhí)行無內存過量使用處理强戴,也就是不能使用swap交換內存亭螟,比如實際使用的物理內存是64G,那么允許使用的內存就不能超過64G骑歹,如果用著用著內存超過了64G预烙,又不允許使用交互內存,就會造成內存被耗盡道媚。
    2:表示運行內存過量使用扁掸,也就是可以使用swap交換內存,但要配合overcommit_ratio使用衰琐,可用的物理內存=swap+ramovercommit_ratio也糊,overcommit_ratio是一個比例,比如swap=4G羡宙,
    ram=2G狸剃,overcommit_ratio=0.5,可用的物理內存=4+2
    0.5=5G,但如果ram值很大狗热,比如服務器的ram=64G钞馁,此時overcommit_ratio就要設置的大一點,比如0.9或者0.95匿刮,這樣可用的內存=4+64*0.9=61.6G
    這樣ram的物理內存就不會被耗盡僧凰,因為使用了57.6之后就會使用交換內存,當然我們有的時候為了調優(yōu)的目的熟丸,會把這個值設置為1训措,這樣就會最大限度的利用ram物理內存,直到內存被耗盡為止
  • 設置超大內存頁數(shù)
[root@node1 vm]#cat /proc/sys/vm/nr_hugepages #規(guī)定在內核中配置的超大頁數(shù)光羞,默認值為0绩鸣,只有系統(tǒng)中有足夠的連續(xù)可用頁時放可分配
0
如果要啟動直接echo一個正整數(shù)即可
以上操作要想永久保存可以寫到配置文件/etc/sysctl.conf
[root@node1 vm]#sysctl --help
使用sysctl -p可以讓配置文件生效
[root@node1 vm]#cat /proc/meminfo  #可以查看是否配置超大內存頁
HugePages_Total:       0 
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
[root@node1 vm]#echo 10 > /proc/sys/vm/nr_hugepages
[root@node1 vm]#cat /proc/meminfo 
HugePages_Total:      10 #發(fā)現(xiàn)設置了10個超大內存頁
HugePages_Free:       10
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB #每個內存頁的大小為2048KB
  • 與容量相關的內容可調參數(shù)
    在/proc/sys/kernel目錄中
    用于設置進程間通訊時占用內存的大小,進程間相互通訊時靠消息隊列中的消息進行通訊纱兑,如果a進程要和b進程通訊呀闻,就發(fā)一個消息,然后將這個消息放到消息隊列中排隊潜慎,輪到這個消息了就發(fā)給b進程捡多,兩個進程通訊時在內存中有很多個消息隊列。發(fā)送的消息時會放在隨機的一個消息隊列中
    msgmax:單個消息的最大值铐炫,默認值為65536個字節(jié)
    msgmnb:單個消息隊列的最大值垒手,默認值也是65536個字節(jié),如果單個消息的大小占65536個字節(jié)倒信,那么這個消息隊列中只能放一個消息了
    msgmni:規(guī)定消息隊列的最大數(shù)量淫奔,64位架構機器默認值為1985,32位架構機器默認值為1736
    msgmnbmsgmni就是內存中的消息隊列所占的內存空間有多大
    shmall:規(guī)定共享內存片段一片最大能有多大,共享內存由一個個共享內存片段組成堤结,此值規(guī)定的就是每個共享內存片段的大小唆迁,64位架構機器的默認值為4294967296個字節(jié)鸭丛;32位架構的機器默認值為268435456字節(jié)
    shmmax:以字節(jié)為單位規(guī)定內核可允許的最大共享內存,64位系統(tǒng)默認為68719476736,32位系統(tǒng)默認為4294967295唐责,注:內核支持的值比這個值要多的多
    shmmni:規(guī)定系統(tǒng)最大共享內存片段有多少個鳞溉,64和32位系統(tǒng)默認都是4096個
    shmmax=shmall
    shmmni
    threads-max:規(guī)定一次內核使用的最大線程數(shù),發(fā)起進程請求時需要創(chuàng)建線程鼠哥,這個值就是規(guī)定能夠創(chuàng)建多少個線程熟菲,最小值為20
  • 與容量相關的文件系統(tǒng)可調參數(shù)
    位于/proc/sys/fs目錄中
    aio-max-nr:規(guī)定異步I/0模式允許的最多事件數(shù),默認值為65536朴恳,一般用于nginx等支持異步I/O模式的服務抄罕,這個值已經(jīng)夠大了,一般不需要調整
    file-max:內核分配的文件數(shù)的最大值于颖,默認為1024個呆贿,一般不需要修改
    上面兩個參數(shù),每調大一個就意味著物理內存空間會被占用一些森渐,這就需要有足夠大的物理內存空間
  • Out-of-Memory Kill可調參數(shù)
    在/proc/pid/oom_adj目錄下 pid代表進程編號
    定義-16到15之間的一個數(shù)值以便幫助決定某個進程的oom_score做入,oom_score的值越高,當內存被耗盡時就優(yōu)先被oom_killer殺死同衣,將oom_adj的值設置為-17則表示這個進行刀槍不入竟块,不能被oom_killer殺死,為了避免內存耗盡時某個進程被殺死耐齐,可以將此值設置為-17浪秘,但要先利用腳本獲取某個進程的進程編號才能修改
  • 調整虛擬內存
    swappiness:參數(shù)值為0-100,調整系統(tǒng)使用交換內存傾向性的設置埠况,數(shù)值越高秫逝,越優(yōu)先使用交換內存,默認為60询枚,如果要想讓系統(tǒng)盡量不使用交換內存,可以將overcommit_memory設置為1浙巫,也就是不允許過量使用內存金蜀,不能使用swap交換內存,然后將swappiness設置為0的畴,默認值為60比較大渊抄,為了調優(yōu),要把此值設置的小一點丧裁,要讓系統(tǒng)盡量不使用交換內存护桦,以提升性能。
[root@centos6 1345]#cat /proc/sys/vm/swappiness
60

min_free_kbytes:設置系統(tǒng)剩余可用物理內存為多少時才開始使用交換內存煎娇,單位為KB二庵,一般不需要調整

[root@centos6 1345]#cat /proc/sys/vm/swappiness
60

dirty_ratio:規(guī)定百分比值贪染,當臟數(shù)據(jù)的大小達到系統(tǒng)內存總大小的這個百分比值后開始把臟數(shù)據(jù)同步到磁盤,我們在更改一個文本時催享,先把這個文本讀到內存中杭隙,在內存中更改,臟數(shù)據(jù)指的是在內存中修改完還沒有來得急同步到磁盤上的數(shù)據(jù)因妙,當臟數(shù)據(jù)的大小達到規(guī)定的百分比時開始往磁盤上寫臟數(shù)據(jù)痰憎,默認為20,這個值不應該設置的過大攀涵,如果服務器掛了铣耘,就會有很多在內存中的數(shù)據(jù)還沒有同步到磁盤上,造成數(shù)據(jù)丟失以故,如果值過小又會造成頻繁的寫操作蜗细,增加磁盤IO,影響系統(tǒng)性能

[root@centos6 1345]#cat /proc/sys/vm/dirty_ratio #默認值較小据德,可以改為40
20

dirty_background_ratio:也是規(guī)定百分比鳄乏,根上面不同的是,dirty_ratio是單個進程臟數(shù)據(jù)大小占總內存大小的百分比達到多少時開始寫臟數(shù)據(jù)到磁盤棘利,而dirty_background_ratio是所有進程的臟數(shù)據(jù)大小占總內存大小的百分比達到多少時開始寫臟數(shù)據(jù)到磁盤橱野,默認為10
drop_caches:表示釋放內存的緩存,值有以下三個
1:系統(tǒng)釋放所有頁緩沖內存善玫,頁緩存是緩存文件的數(shù)據(jù)
2:系統(tǒng)釋放所有未使用的slab緩沖內存水援,slab是緩存文件的元數(shù)據(jù)
3:系統(tǒng)釋放所有頁緩沖和slab緩沖內存

[root@centos6 1345]#free -m
             total       used       free     shared    buffers     cached
Mem:           980        910         69          2         65        494
-/+ buffers/cache:        350        630
Swap:         2047          0       2047
[root@centos6 1345]#echo 1 > /proc/sys/vm/drop_caches 
[root@centos6 1345]#free -m #發(fā)現(xiàn)緩存已經(jīng)變成53了
             total       used       free     shared    buffers     cached
Mem:           980        396        583          2          0         53
-/+ buffers/cache:        343        637
Swap:         2047          0       2047

不建議在生成環(huán)境中使用drop_caches釋放緩存

5、磁盤I/O性能優(yōu)化

磁盤器中的調度算法
CFQ:完全公平隊列茅郎,盡可能保證將可用I/O能力公平的分配給需要用到IO請求的進程
Deadline:每一個IO請求都有一個最后期限蜗元,在這個最后期限內IO請求必須被完成,使每個IO請求都不能被餓死
Anticipatory:就是在每一次IO操作時磁頭會在那個磁道和扇區(qū)停留一會系冗,看有沒有其他IO請求也要寫到這個區(qū)域的奕扣,就正好順道寫上,但實際上這種調度算法并不會提高多少IO性能掌敬,這種算法在較新的版本中在內核中已經(jīng)被移除了
Noop:不做調度惯豆,先進行的請求先進行寫磁盤操作
每個磁盤都有一個調度器

[root@node1 devices]#find /sys/devices/ -iname scheduler
/sys/devices/pci0000:00/0000:00:07.1/ata2/host2/target2:0:0/2:0:0:0/block/sr0/queue/scheduler 
/sys/devices/pci0000:00/0000:00:10.0/host0/target0:0:0/0:0:0:0/block/sda/queue/scheduler
/sys/devices/pci0000:00/0000:00:10.0/host0/target0:0:1/0:0:1:0/block/sdb/queue/scheduler
/sys/devices/pci0000:00/0000:00:10.0/host0/target0:0:2/0:0:2:0/block/sdc/queue/scheduler
/sys/devices/pci0000:00/0000:00:10.0/host0/target0:0:3/0:0:3:0/block/sdd/queue/scheduler #在這些目錄下的scheduler文件中定義了當前正在使用的磁盤調度器
[root@centos6 1345]#cat /sys/devices/pci0000:00/0000:00:10.0/host2/target2:0:0/2:0:0:0/block/sda/queue/scheduler #centos6中默認是cfq調度算法
noop anticipatory deadline [cfq] 
[root@node1 devices]#cat /sys/devices/pci0000:00/0000:00:10.0/host0/target0:0:1/0:0:1:0/block/sdb/queue/scheduler #centos7中默認是deadline調度算法
noop [deadline] cfq 
[root@centos6 1345]#echo deadline > /sys/devices/pci0000:00/0000:00:10.0/host2/target2:0:0/2:0:0:0/block/sda/queue/scheduler #修改磁盤調度器的調度算法
[root@centos6 1345]#cat /sys/devices/pci0000:00/0000:00:10.0/host2/target2:0:0/2:0:0:0/block/sda/queue/scheduler
noop anticipatory [deadline] cfq 

一般情況下不需要修改調度算法,因為即使修改了也提高不了多少IO性能奔害,還不如使用固態(tài)硬盤提高的性能大楷兽。

6、文件系統(tǒng)

1华临、在執(zhí)行mkfs創(chuàng)建文件系統(tǒng)時指明塊大小芯杀,根據(jù)存儲文件的的大小進行設定,如果存儲的都是小文件,就使用小塊揭厚,如果存儲的文件比較大就使用大塊
2却特、外部日志:將日志放在專用的外部存儲中,但要確保外部日志是可靠的棋弥,不然丟失外部日志文件都可能造成文件系統(tǒng)的四級核偿,外部日志在運行mkfs創(chuàng)建文件系統(tǒng),并要掛載時指定日志設備
3顽染、掛載選項:
Barriers:Barriers可以保證數(shù)據(jù)的可靠性漾岳,啟用Barriers會顯著延緩一些程序的寫入性能,可使用nobarrier掛載選項禁用barrier粉寞,但禁用后可能會造成一些數(shù)據(jù)丟失尼荆,對于可以容忍斷電后承受數(shù)據(jù)丟失的場景可以使用此掛載選項
noatime:掛載時使用noatime掛載選項,如果不需要準確的atime唧垦,還可以啟用nodiratime捅儒,表示不更新目錄的訪問時間戳,但對文件是無效的振亮,noatime對文件和目錄都有效巧还,設定了noatime就不用設定nodiratime了
ext4文件系統(tǒng)
init_itable=n掛載選項可以控制發(fā)生初始化的比例,其中執(zhí)行這個后臺初始化的時間約為1/n坊秸,n的默認值為10
anto-fsync行為麸祷,ext4默認自動同步文件,可以使用mount -o noauto_da_alloc選項禁用它褒搔,這意味著該程序必須明確使用fsync()以保證數(shù)據(jù)一致
XFS文件系統(tǒng)
一般不需要調整阶牍,基本上都是最優(yōu)的

6、網(wǎng)絡優(yōu)化

計算核心緩沖的大小total buffers=帶寬*網(wǎng)絡延遲

[root@node1 devices]#ping 172.18.0.1
PING 172.18.0.1 (172.18.0.1) 56(84) bytes of data.
64 bytes from 172.18.0.1: icmp_seq=1 ttl=64 time=1.97 ms
64 bytes from 172.18.0.1: icmp_seq=2 ttl=64 time=1.02 ms
64 bytes from 172.18.0.1: icmp_seq=3 ttl=64 time=1.07 ms
64 bytes from 172.18.0.1: icmp_seq=4 ttl=64 time=1.36 ms
^C
--- 172.18.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3005ms
rtt min/avg/max/mdev = 1.020/1.360/1.979/0.382 ms #avg就是平均的網(wǎng)絡延遲
對于千兆以太網(wǎng)
帶寬=1000Mb/S
1000*1024*1024b/s
total buffers=1000*1024*1024b/s*1.36*10^-3s=1.42Mb=186122字節(jié)
根據(jù)這個值設置以下各項
vim /etc/sysctl.conf
net.core.rmem_default #核心接收緩沖的默認值
net.core.rmem_max #核心接收緩沖的最大值
net.core.wmem_default #核心發(fā)送緩沖的默認值
net.core.wmem_max #核心發(fā)送緩沖的最大值
sysctl -p
[root@node1 devices]#sysctl -a |grep net.core #可以查看默認值
net.core.rmem_default = 212992 #單位是字節(jié)星瘾,可以修改為上面的186122
net.core.rmem_max = 212992
net.core.wmem_default = 212992
net.core.wmem_max = 212992
[root@node1 devices]#cat /proc/sys/net/ipv4/tcp_mem #tcp協(xié)議的內存空間大小
21813   29084   43626 #有三個值走孽,min default max
[root@node1 devices]#cat /proc/sys/net/ipv4/tcp_rmem #tcp協(xié)議的接收緩沖大小
4096      87380 6291456
[root@node1 devices]#cat /proc/sys/net/ipv4/tcp_wmem #tcp協(xié)議的發(fā)送緩沖大小
4096      16384 4194304
內存在接收數(shù)據(jù)時先放到內存的接收緩沖區(qū),再放到內存琳状,發(fā)送數(shù)據(jù)時先放到內存的發(fā)送緩沖區(qū)磕瓷,再發(fā)送出去
在使用nginx等web服務時經(jīng)常需要調整的內核參數(shù)
[root@node1 devices]#cat /proc/sys/net/ipv4/tcp_tw_reuse #允許重用TCP的TIME-WAIT狀態(tài)重用
0
[root@node1 devices]#cat /proc/sys/net/ipv4/tcp_syncookies #啟用
syncookies可以在一定程度上保護syn flood攻擊,也就是有大量客戶端syn請求被涌入時
1
[root@node1 devices]#cat /proc/sys/net/ipv4/tcp_max_orphans #在內核中允許的最大孤兒進程念逞,孤兒進程指的是內核打開了tcp套接字
困食,但沒有任務一個文件描述符關聯(lián)到此套接字上,這種就稱為孤兒進
程肮柜,這個值一般只能調大,比如在受到ddos攻擊時會打開大量的套接
字倒彰,但來不及創(chuàng)建文件
4096
[root@node1 devices]#cat /proc/sys/net/ipv4/tcp_fin_timeout 
60
[root@node1 devices]#cat /proc/sys/net/ipv4/tcp_max_tw_buckets #內核所能允許的tcp的time-wait狀態(tài)套接字的數(shù)量
4096
[root@node1 devices]#cat /proc/sys/net/core/somaxconn 
128
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末审洞,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌芒澜,老刑警劉巖仰剿,帶你破解...
    沈念sama閱讀 222,464評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異痴晦,居然都是意外死亡南吮,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評論 3 399
  • 文/潘曉璐 我一進店門誊酌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來部凑,“玉大人,你說我怎么就攤上這事碧浊⊥垦” “怎么了?”我有些...
    開封第一講書人閱讀 169,078評論 0 362
  • 文/不壞的土叔 我叫張陵箱锐,是天一觀的道長比勉。 經(jīng)常有香客問我,道長驹止,這世上最難降的妖魔是什么浩聋? 我笑而不...
    開封第一講書人閱讀 59,979評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮臊恋,結果婚禮上衣洁,老公的妹妹穿的比我還像新娘。我一直安慰自己捞镰,他們只是感情好闸与,可當我...
    茶點故事閱讀 69,001評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著岸售,像睡著了一般践樱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上凸丸,一...
    開封第一講書人閱讀 52,584評論 1 312
  • 那天拷邢,我揣著相機與錄音,去河邊找鬼屎慢。 笑死瞭稼,一個胖子當著我的面吹牛,可吹牛的內容都是我干的腻惠。 我是一名探鬼主播环肘,決...
    沈念sama閱讀 41,085評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼集灌!你這毒婦竟也來了悔雹?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 40,023評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎腌零,沒想到半個月后梯找,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,555評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡益涧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,626評論 3 342
  • 正文 我和宋清朗相戀三年锈锤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片闲询。...
    茶點故事閱讀 40,769評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡久免,死狀恐怖,靈堂內的尸體忽然破棺而出嘹裂,到底是詐尸還是另有隱情妄壶,我是刑警寧澤,帶...
    沈念sama閱讀 36,439評論 5 351
  • 正文 年R本政府宣布寄狼,位于F島的核電站丁寄,受9級特大地震影響,放射性物質發(fā)生泄漏泊愧。R本人自食惡果不足惜伊磺,卻給世界環(huán)境...
    茶點故事閱讀 42,115評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望删咱。 院中可真熱鬧屑埋,春花似錦、人聲如沸痰滋。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽敲街。三九已至团搞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間多艇,已是汗流浹背逻恐。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留峻黍,地道東北人复隆。 一個月前我還...
    沈念sama閱讀 49,191評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像姆涩,于是被迫代替她去往敵國和親挽拂。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,781評論 2 361

推薦閱讀更多精彩內容