进程,系统性能和计划任务

进程的概念

内核和用户空间

image.png

进程的状态和转换

image.png

LRU算法

image.png

进程间通信

  1. 同一主机内
  • pipe
  • socket 文件
  • signal 信号
  • shm shared memory
  • semaphore 信号量,一种计数器
  1. 不同主机
  • socket IP和端口号
  • RPC remote procedure call
  • MQ 消息队列,Kafka, RabbitMQ, ActiveMQ

进程优先级

image.png

linux进程状态

  1. 运行态 running
  2. 就绪态 ready
  3. 睡眠态
  • 可中断 interruptable
  • 不可中断 uninterruptable
  1. 停止态 stopped, 暂停于内存, 但不会被调度,除非手动启动
  2. 僵死态 zombie, 结束进程,父进程结束前,子进程不关闭

进程工具

查看进程命令 ps

格式

ps [OPTION]...

选项

1.支持三种选项

  • UNIX选项,如 -A -e
  • BSD选项, 如 a
  • GNU选项,如--help
  1. 选项
option comment
默认 显示当前终端中的进程
a 包括所有终端中的进程
x 包括不链接终端的进程
u 选项显示进程所有者信息
f 选项显示进程树
k | --sort 属性 对属性排序,属性前加-表示倒序
o 属性... 选项显示定制信息pid、cmd、%cpu、%mem
L 显示支持的属性列表
UNIX选项
-C cmdlist 指定指定命令的进程,多个命令用',' 分隔
-L 显示线程
-e 显示所有进程,相当于-A
-f 显示完整格式进程信息
-F 显示更完整的格式的进程信息
-H 以进程层级格式显示进程相关信息
-u userlist 指定有效的用户ID或名称
-U userlist 指定真正的用户ID或名称
-g gid or groupname 指定有效的gid或组名称
-G gid or groupname 指定真正的gid或组名称
-p pid 显示指pid的进程
--ppid pid 显示属于pid子进程
输出
output comments
VSZ virtual memory size, 虚拟内存集,线性内存
RSS Resident size,常驻内存集
STAT进程状态
R running
S interrupttable sleeping
D unintertuptable sleeping
T stopped
Z zombie
+ 前台进程
l 多线程进程
L 内存分页并带锁
N 低优先级进程
< 高优先级进程
s session lasder,会话发起者
ni nice值
pri priority优先级
psr processor CPU编号
rtprio 实时优先级
常用组合
command comment
ps aux 显示所有进程信息
ps -ef 以多输出新方式显示所有进程

ps -eFH
ps axo pid,cmd,psr,ni,pri,rtprio |
ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,comm |
ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,pcpu,comm |

# 查询你拥有的所有进程
ps -x

# 显示指定用户的进程
ps -fU apache
ps -fU 48
ps -fu tom
ps -fu 1000

#查看以root权限运行的进程
ps -U root -u root

#列出某个组拥有的所有进程
ps -fG nginx

# 列出有效组名称(或会话)所拥有的所有进程
ps -fg mysql
ps -fg 27

# 显示指定进程ID对应的进程
ps -fp 1234 

# 以父进程ID来显示其下所有进程
ps -f --ppid 1234

# 显示指定PID的多个进程
ps -fp 1204,1239,1263

# 按tty显示所属进程
ps -ft pts/0

# 以进程树显示系统中的进程如何相互链接
ps -e --forest

# 以进程树显示指定的进程
ps -f --forest -C sshd
ps -ef --forest | grep -v grep | grep sshd

# 要显示一个进程的所有线程,将显示LWP(轻量级进程)以及NLWP(轻量级进 程数
ps -fL -C nginx

# 要列出所有格式说明符
ps L

# 查看进程的PID,PPID,用户名和命令
ps -eo pid,ppid,user,cmd

# 自定义格式显示文件系统组,ni值,开始时间和进程的时间
ps -p 1234 -o pid,ppid,fgroup,ni,lstart,etime

# 使用其PID查找进程名称
ps -p 1244 -o comm=

# 要以其名称选择特定进程,显示其所有子进程
ps -C sshd,bash

# 查找指定进程名所有的所属PID,在编写需要从std输出或文件读取PID的脚本时 这个参数很有用
ps -C httpd,sshd -o pid=

# 检查一个进程的执行时间
ps -eo comm,etime,user | grep nginx

# 查找占用最多内存和CPU的进程
ps -eo pid,ppid,cmd,%mem,%cpu --sort=-%mem | head ps -eo 
pid,ppid,cmd,%mem,%cpu --sort=-%cpu | head

# 显示安全信息
ps -eM 
ps --context

# 使用以下命令以用户定义的格式显示安全信息
ps -eo euser,ruser,suser,fuser,f,comm,label

进程优先级

image.png
进程优先级调整
  1. 静态优先级 100-139
  2. 默认启动进程时:nice为0,优先级为120
nice命令 nice [OPTION] [COMMAND [ARG]..]
renice [-n] priority pid...
nice -n -10 tail -f /var/log/messages

[root@test1_c1 1]#ps -C tail -o pid,cmd,ni,pri
   PID CMD                          NI PRI
  5781 tail -f /var/log/messages   -10  29
[root@test1_c1 1]#renice -n 0 5781
5781 (process ID) old priority -10, new priority 0
[root@test1_c1 1]#ps -C tail -o pid,cmd,ni,pri
   PID CMD                          NI PRI
  5781 tail -f /var/log/messages     0  19
[root@test1_c1 1]#renice -n -10 5781
5781 (process ID) old priority 0, new priority -10

# taskset 绑定cpu
[root@test1_c1 1]#taskset -p 6182
pid 6182's current affinity mask: 3

[root@test1_c1 1]#taskset -cp 1 6182
pid 6182's current affinity list: 0,1
pid 6182's new affinity list: 1

# pidof 查询命令对应的pid
[root@test1_c1 1]#pidof tail
6182

taskset -cp 'pidof dd' 0,2

进程搜索 pgrep [options] pattern

options comments
-u uid effective user
-U uid real user
-t terminal 与给定终端相关进程
-l 显示进程名
-a 显示完成格式的进程名
-P pid 显示指定进程的子进程
  1. 查找命令的pid:pidof bash

杀死进程 kill


系统性能相关工具

/proc/uptime

系统启动时长;空闲进程的总时长(按总的cpu核数计算)
计算cpu利用率

[root@test1_c1 1]#cat /proc/uptime
62084.80 123985.78

uptime和w

[root@test1_c1 1]#uptime
 14:42:08 up 17:05,  2 users,  load average: 0.00, 0.01, 0.05
格式
  1. 当前时间
  2. 系统已启动的时间
  3. 当前上线人数
  4. 系统平均负载(1,5,10分钟的平均负载,一般不会超过1)
  • 系统平均负载:指在特定时间间隔内运行队列中的平均进程数
  • 通常每个cpu内核的当前活动进程数不大于3,那么系统的性能良好;如果每个cpu内核的任务数大于5,主机有严重性能问题
  • 如果linux主机是1个双核CPU,当load average为6时说明机器已经被充分使用

top

内置命令
  1. 排序
  • P:以占据CPU百分比排序,%CPU
  • M:以占据内存百分比排序 %MEM
  • T:累积占据的CPU时长, TIME+
  1. 头部信息显示:
  • l 显示uptime信息
  • t tasks及cpu信息
  • 1 cpu分别显示
  • m memory信息
  1. 退出 q
  2. 修改刷新时间间隔:s
  3. 终止指定进程:k
  4. 保存文件:W
输出信息
  1. us:用户空间
  2. sy:内核空间
  3. ni:调整nice的时间
  4. id:空闲
  5. wa:等待IO时间
  6. hi:硬中断
  7. si:软中断时间
  8. st:虚拟机偷走的时间
选项
  1. -d # 指定刷新时间间隔,默认3秒
  2. -b 全部显示所有进程
  3. -n # 刷新多少次后退出
  4. -H 线程模式,top -H -p pidof mysqld
htop
  1. 选项
  • -d #:指定延时时间
  • -u UserName 仅显示指定用户的进程
  • -s Colume:以指定字段进行排序
  1. 子命令
  • s 跟踪选定进程的系统调用
  • l 显示选定进程打开的文件列表
  • a 将选定的进程绑定至某cpu核
  • t 显示进程树

内存

free [OPTION]
  • -h 易读格式
  • -o 不显示-/+buffers/cache行
  • -t 显示RAM+swap 总和
  • -s n 刷新间隔为n秒
  • -c n 刷新n次后即退出
# 清空cache
[root@test1_c1 1]#free -h
              total        used        free      shared  buff/cache   available
Mem:           972M        148M        143M        2.0M        680M        667M
Swap:          3.0G         41M        3.0G
[root@test1_c1 1]#find /proc -name 'drop*'
/proc/sys/fs/quota/drops
/proc/sys/vm/drop_caches
[root@test1_c1 1]#cat /proc/sys/vm/drop_caches
0
[root@test1_c1 1]#echo 3 > /proc/sys/vm/drop_caches
[root@test1_c1 1]#free -h
              total        used        free      shared  buff/cache   available
Mem:           972M         96M        839M        2.1M         36M        787M
Swap:          3.0G         41M        3.0G
vmstat
[root@test1_c1 1]#vmstat
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 3  0  42384 854808      0  41472    8   46    42   104   84   59  1  4 95  0  0
  1. proc:
  • r 可运行(正运行或等待运行)进程的个数,和核心数有关
  • b 处于不可中断睡眠态的进程个数(被阻塞的队列长度)
  1. memory
  • swpd 交换内存的使用总量
  • free 空闲物理内存总量
  • buff 用于buffer的内存总量
  • cache 用于cache的内存总量
  1. swap
  • si 从磁盘交换进内存的数据速率(kb/s)
  • so 从内存交换至磁盘的数据速率(kb/s)
  1. IO:
  • bi 从块设备读入数据到系统的速率(kb/s)
  • bo 保存数据至块设备的速率
  1. system
  • in interrupts 中断速率,包括时钟
  • cs context switch 进程切换的速率
  1. cpu
  • us 用户空间
  • sy 内核空间
  • id idle
  • wa IO等待时间
  • st 虚拟机时间

监控工具

iostat
[root@test1_c1 1]#iostat
Linux 3.10.0-1127.el7.x86_64 (test1_c1.localdomain)     08/31/2020  _x86_64_    (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           1.02    0.00    4.38    0.00    0.00   94.59

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
scd0              0.00         0.12         0.00       8336          0
sda               0.77         6.52        49.70     457590    3488019
sdb               0.05         0.57        15.18      39904    1065333
sdc               0.97        75.57        72.89    5303616    5115393
sdd               0.17         0.94        66.76      66195    4684868
sde               0.01         0.22         0.00      15680          0
dm-0              0.61         5.66        30.50     396875    2140181
dm-1              4.89         0.46        19.18      32372    1345720
dm-2              0.02         0.15         0.21      10789      14890
iftop 监控网络带宽

iftop -n -i eth0

pmap 进程的内存映射
  • pmap [options] pid [...]
  • cat /proc/PID/maps
[root@test1_c1 1]#cat /proc/6770/maps
00400000-00411000 r-xp 00000000 fd:00 50624734                           /usr/bin/dd
00610000-00611000 r--p 00010000 fd:00 50624734                           /usr/bin/dd
00611000-00612000 rw-p 00011000 fd:00 50624734                           /usr/bin/dd
0140f000-01430000 rw-p 00000000 00:00 0                                  [heap]
7feb1c483000-7feb229c5000 r--p 00000000 fd:00 50554561                   /usr/lib/locale/locale-archive
7feb229c5000-7feb22b88000 r-xp 00000000 fd:00 1946153                    /usr/lib64/libc.so.6
7feb22b88000-7feb22d88000 ---p 001c3000 fd:00 1946153                    /usr/lib64/libc.so.6
7feb22d88000-7feb22d8c000 r--p 001c3000 fd:00 1946153                    /usr/lib64/libc.so.6
7feb22d8c000-7feb22d8e000 rw-p 001c7000 fd:00 1946153                    /usr/lib64/libc.so.6
7feb22d8e000-7feb22d93000 rw-p 00000000 00:00 0 
7feb22d93000-7feb22db5000 r-xp 00000000 fd:00 40826                      /usr/lib64/ld-2.17.so
7feb22fa8000-7feb22fab000 rw-p 00000000 00:00 0 
7feb22fb3000-7feb22fb4000 rw-p 00000000 00:00 0 
7feb22fb4000-7feb22fb5000 r--p 00021000 fd:00 40826                      /usr/lib64/ld-2.17.so
7feb22fb5000-7feb22fb6000 rw-p 00022000 fd:00 40826                      /usr/lib64/ld-2.17.so
7feb22fb6000-7feb22fb7000 rw-p 00000000 00:00 0 
7fff20ae5000-7fff20b06000 rw-p 00000000 00:00 0                          [stack]
7fff20bac000-7fff20bae000 r-xp 00000000 00:00 0                          [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0                  [vsyscall]
[root@test1_c1 1]#pmap -x 6770
6770:   dd if=/dev/zero of=/dev/null
Address           Kbytes     RSS   Dirty Mode  Mapping
0000000000400000      68      40       0 r-x-- dd
0000000000610000       4       4       4 r---- dd
0000000000611000       4       4       4 rw--- dd
000000000140f000     132      20      20 rw---   [ anon ]
00007feb1c483000  103688      40       0 r---- locale-archive
00007feb229c5000    1804     328       0 r-x-- libc.so.6
00007feb22b88000    2048       0       0 ----- libc.so.6
00007feb22d88000      16      16      16 r---- libc.so.6
00007feb22d8c000       8       8       8 rw--- libc.so.6
00007feb22d8e000      20      12      12 rw---   [ anon ]
00007feb22d93000     136     108       0 r-x-- ld-2.17.so
00007feb22fa8000      12      12      12 rw---   [ anon ]
00007feb22fb3000       4       4       4 rw---   [ anon ]
00007feb22fb4000       4       4       4 r---- ld-2.17.so
00007feb22fb5000       4       4       4 rw--- ld-2.17.so
00007feb22fb6000       4       4       4 rw---   [ anon ]
00007fff20ae5000     132      16      16 rw---   [ stack ]
00007fff20bac000       8       4       0 r-x--   [ anon ]
ffffffffff600000       4       0       0 r-x--   [ anon ]
---------------- ------- ------- ------- 
total kB          108100     628     108

strace 跟踪程序进行的系统调用
strace dd

ltrace 程序调用的函数库
glances命令 c/s模式
  1. 服务器模式
    glances -s -B IPADDR(监听地址)
  2. 客户端模式
    glances -c IPADDR(服务器地址)
dstat
iotop
nload
lsof 查看当前系统文件
  1. 进程管理
 # 查看由登录用户/dev/pts/1启动而非系统启动的进程
lsof /dev/pts/1      
# 指定进程号,查看该进程打开的文件
lsof -p 9527
  1. 文件管理
# 查看指定程序打开的文件
lsof -c httpd
# 查看指定用户打开的文件
lsof -u root | more
# 查看指定目录下被打开的文件
lsof +D /var/log        # 递归列出目录下被打开的文件
lsof +d /var/log        #  列出目录下被打开的文件
  1. 网络管理
#查看所有网络连接
lsof -i -n
lsof -i@127.0.0.1   #通过参数-i查看网络连接情况,包括连接的ip、端口等以及一些服务连接情况
# 查看端口连接情况
lsof -i:80 -n    #查看端口80正在被哪些进程所使用
# 查看指定进程打开的网络连接
lsof -i -n -a -p 9527   # -i 查看网络连接情况;-a查看存在进程;-p指定进程
# 查看指定状态的网络连接
lsof -n -P -i TCP -s TCP:ESTABLISHED    #-n:no host names, -P:no port names,-i TCP指定协议,-s指定协议状态通过多个参数可以 清晰的查看网络连接情况、协议连接情况等

# 恢复删除的文件
# 误删除/var/log/messages

lsof | grep /var/log/messages
rm -f /var/log/messages
lsof | grep /var/log/messages
cat /proc/653/fd/6
cat /proc/653/fd/6 > /var/log/messages

进程管理工具kill

向进程发送控制信号,以实现对进程的管理,每个信号对应一个数字,信号以SIG开头,不区分大小写。

信号
  1. 显示当前系统可用的信号 kill -l 或者trap -l
常用信号 comment
1)SIGHUP 无须关闭进程而让其重读配置文件
2)SIGINT 终止正在运行的进程;相当于ctrl+c
3)SIGQUIT 相当于crtl+\,quit退出
9)SIGKILL 强制杀死正在运行的进程
15)SIGTERM 终止正在运行的进程, default value
18)SIGCONT 继续运行
19)SIGSTOP 后台休眠
# sig 0 检查进程运行状况
kill -0 ping
[root@test1_c1 data]#killall -0 ping
[root@test1_c1 data]#echo $?
0
killall -0 httpd &>/dev/null || systemctl restart httpd

指定信号的方法

way comments
1,2,9 信号的数字标识
SIGHUP 信号完整的名称
HUP 信号简写名称
kill命令
  1. 按PID:
  • kill [-SIGNAL] pid ...
  • kill -n SIGNAL pid
  • kill -s SIGNAL pid
  1. 按名称
  • killall [-SIGNAL] command...
  1. 按模式
  • pkill [OPTIONS] pattern
  • SIGNAL
  • -u uid: effective user
  • -U uid: real user
  • -t terminal: 与指定的终端相关的进程
    -l 显示进程名
    -a 显示完整格式的进程名
    -P pid:显示指定进程的子进程

作业管理

linux的作业控制

  1. 前台作业:通过终端启动,且启动后一直占据终端
  2. 后台作业:可通过终端启动,单启动后即转入后台运行(释放终端)

让作业运行于后台

  1. 运行中的作业 : ctrl+z
  2. 启动作业:COMMAND &

剥离作业与终端的关系

后台作业虽然被送往后台运行,但其依然与终端相关;退出终端,将关闭后台作业。如果希望送往后台后,剥离与终端的关系:

  • nohup COMMAND &>/dev/null &
  • screen; COMMAND

查看当前终端所有作业 jobs

作业控制:

  1. fg [[%]JOB_NUM] 把指定的后台作业调回前台
  2. bg [[%] JOB_NUM] 让送往后台的作业在后台继续运行 (ctrl+z 的作业)
  3. killall -19 command 让后台运行的作业休眠
  4. killall -18 command 让后台休眠的作业运行 == bg
    18)SIGCONT | 继续运行
    19)SIGSTOP | 后台休眠
  5. kill[%JOB_NUM] 终止指定的作业


    image.png

并行运行

同时运行多个进程,提高效率
1 方法1

  • vi all.sh
  • f1.sh&
  • f2.sh&
  • f3.sh&
  1. 方法2
    (f1.sh&);(f2.sh&);(f3.sh&)
  2. 方法3
    { f1.sh& f2.sh& f3.sh& } note 前后有空格
# 顺序执行
ping -c3 www.taobao.com;ping -c3 www.baidu.com; ping -c3 www.qq.com

# 方法1
vim ping_pa.sh
ping -c3 www.baidu.com &
ping -c3 www.qq.com & 
ping -c3 www.taobao.com &
bash ping_pa.sh

# 方法2
(ping -c3 www.baidu.com &);(ping -c3 www.qq.com &); (ping  -c3 www.taobao.com &)

# 方法3
{ ping -c3 www.baidu.com & ping -c3 www.baidu.com & ping -c3 www.baidu.com & }

计划任务

at

指定时间点,执行一次性任务 at [option] TIME

  1. option
options comments
-V 显示版本信息
-t time 时间格式[[CC]YY]MMDDhhmm[.ss]
-l 列出指定队列中等待运行的作业;相当于atq
-d 删除指定的作业;相当于atrm
-c 查看具体作业任务
-f /path/file 指定的文件中读取任务
-m 当任务完成后,将给用户发送邮件
note 作业执行命令的结果中的标准输出和错误以邮件通知给相关用户
  1. TIME 定义什么时间进行at这项任务的时间
  • HH:MM[YYYY-mm-dd]
  • noon,midnight,teatime(4pm)
  • tomorrow
  • now+#{minutes,hours,days,OR weeks}
  1. at的时间格式
  • HH:MM
#2点20分
02:00
  • HH:MM YYYY-MM-DD
02:00 2019-08-25
  • HH:MM [am][pm][month][date]
04 pm march 17
17:20 tomorrow
  • HH:MM[am|pm] + #[minutes|hours|days|weeks]
now + 5 min
02pm + 3 days
  1. at任务
  • 执行方式:1)交互式 2)输入重定向 3) at -f 文件
  • 依赖atd服务
  • at 队列存放在/var/spool/at中
  • /etc/at.{allow,deny}控制用户是否能执行at任务
    a)白名单:/etc/at.allow 默认不存在,只有该文件用户才能执行at命令
    b)黑名单:/etc/at.deny 默认存在,该文件中的用户不能执行at命令
    c)如果2个文件都不存在,只有root可以执行at命令
at 07:20
touch file
ctrl+d      #退出
at -c 1      # 查jobs的详细信息
at -l          # 列出jobs列表
at -d         # 删除jobs列表

cron 周期性运行某任务

相关程序包
在/etc/crobtab中加入周期运行任务
# 在crontab里加入定时任务
[root@www data]# cat /etc/crontab 
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed
*/10 * * * 1-5 tom /data/check_disk.sh

# 观察cron输出
tail -f /var/log/cron

# 每个工作日的凌晨2点30执行备份任务
30 2 * * 1-5 tom /data/backup.sh

# 每个周六周日或者每个月的1,10,20号的2点30分执行备份任务
30 2 1,10,20 * 0,6 tom /data/backup.sh
使用命令crontab -e
* * * * 1-5 echo hello world
创建crob任务list文件执行
# 执行顺序按文件名顺序
[root@www data]# echo wall 1 > /data/cronlists/f1.sh
[root@www data]# echo wall 2 > /data/cronlists/f2.sh
[root@www data]# echo wall 3 > /data/cronlists/f3.sh

crontab -e 
*/5 * * * * /usr/bin/run-parts /data/cronlists
系统的计划任务
[root@www data]# ls /etc/cron
cron.d/       cron.daily/   cron.deny     cron.hourly/  cron.monthly/ crontab       cron.weekly/  
@reboot的计划任务
@reboot /usr/bin/touch newfile
cron执行多任务
0 */3 * * * centos /bin/echo “howdy”; wall “welcome to Magedu!”
管理临时文件
systemd-tmpfiles-setup
辅助命令
crontab -l        # 查看cron 任务
crontab -l -u tom            # 查看用户tom创建的cron任务

#crob 任务保存在
ls /var/spool/cron/

# 删除tom的crontab 任务
crontab -r -u tom          

# 日志
ls /var/log/cron

# 控制用户执行计划任务: 
/etc/cron.{allow,deny}

# 使用sleep来实现秒级cron任务
注意

运行结果的标准输出和错误以邮件通知给相关用户

  1. COMMAND > /dev/null
  2. COMMAND &> /dev/null
进程管理.png
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,200评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,526评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,321评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,601评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,446评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,345评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,753评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,405评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,712评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,743评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,529评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,369评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,770评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,026评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,301评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,732评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,927评论 2 336