Android基礎(chǔ)性能數(shù)據(jù)獲日逻帧(api或/proc/讀取)

主要資料參考

Android系統(tǒng)源碼在線查看網(wǎng)址
Linux平臺(tái)Cpu使用率的計(jì)算
騰訊開(kāi)源移動(dòng)端性能測(cè)試APP:GT 3.1

內(nèi)存篇

內(nèi)存:表示當(dāng)前進(jìn)程內(nèi)存的使用情況能真,內(nèi)存占用過(guò)高可能會(huì)引起內(nèi)存抖動(dòng)赁严,或OutOfMemory異常
主要用到系統(tǒng)提供的方法,具體源碼參看:Android系統(tǒng)ActivityManager源碼

系統(tǒng)內(nèi)存

  1. 系統(tǒng)內(nèi)存總?cè)萘浚褐恍枰x取“/proc/meminfo”文件的第一個(gè)字段“MemTotal”就可以了粉铐,文件的內(nèi)容如下:
    MemTotal:          94096 kB
    MemFree:            1684 kB
    Buffers:              16 kB
    Cached:            27160 kB
    SwapCached:            0 kB
    Active:            35392 kB
    Inactive:          44180 kB
    Active(anon):      26540 kB
    Inactive(anon):    28244 kB
    Active(file):       8852 kB
    Inactive(file):    15936 kB
    Unevictable:         280 kB
    Mlocked:               0 kB
    SwapTotal:             0 kB
    SwapFree:              0 kB
    Dirty:                 0 kB
    Writeback:             0 kB
    AnonPages:         52688 kB
    Mapped:            17960 kB
    Slab:               3816 kB
    SReclaimable:        936 kB
    SUnreclaim:         2880 kB
    PageTables:         5260 kB
    NFS_Unstable:          0 kB
    Bounce:                0 kB
    WritebackTmp:          0 kB
    CommitLimit:       47048 kB
    Committed_AS:    1483784 kB
    VmallocTotal:     876544 kB
    VmallocUsed:       15456 kB
    VmallocChunk:     829444 kB

各個(gè)字段的含義:

    MemTotal: 所有可用RAM大小疼约。
    MemFree: LowFree與HighFree的總和,被系統(tǒng)留著未使用的內(nèi)存蝙泼。
    Buffers: 用來(lái)給文件做緩沖大小程剥。
    Cached: 被高速緩沖存儲(chǔ)器(cache memory)用的內(nèi)存的大小(等于diskcache minus SwapCache)汤踏。
    SwapCached:被高速緩沖存儲(chǔ)器(cache memory)用的交換空間的大小织鲸。已經(jīng)被交換出來(lái)的內(nèi)存,仍然被存放在swapfile中溪胶,用來(lái)在需要的時(shí)候很快的被替換而不需要再次打開(kāi)I/O端口搂擦。
    Active: 在活躍使用中的緩沖或高速緩沖存儲(chǔ)器頁(yè)面文件的大小,除非非常必要哗脖,否則不會(huì)被移作他用瀑踢。
    Inactive: 在不經(jīng)常使用中的緩沖或高速緩沖存儲(chǔ)器頁(yè)面文件的大小,可能被用于其他途徑懒熙。
    SwapTotal: 交換空間的總大小丘损。
    SwapFree: 未被使用交換空間的大小。
    Dirty: 等待被寫回到磁盤的內(nèi)存大小工扎。
    Writeback: 正在被寫回到磁盤的內(nèi)存大小徘钥。
    AnonPages:未映射頁(yè)的內(nèi)存大小。
    Mapped: 設(shè)備和文件等映射的大小肢娘。
    Slab: 內(nèi)核數(shù)據(jù)結(jié)構(gòu)緩存的大小呈础,可以減少申請(qǐng)和釋放內(nèi)存帶來(lái)的消耗。
    SReclaimable:可收回Slab的大小橱健。
    SUnreclaim:不可收回Slab的大卸(SUnreclaim+SReclaimable=Slab)。
    PageTables:管理內(nèi)存分頁(yè)頁(yè)面的索引表的大小拘荡。
    NFS_Unstable:不穩(wěn)定頁(yè)表的大小臼节。
  1. 系統(tǒng)空閑的內(nèi)存:只需要通過(guò)ActivityManager即可獲取
    //系統(tǒng)空閑內(nèi)存
    public static long getSysFreeMemory(Context context) {
        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        ActivityManager.MemoryInfo mi = new ActivityManager.MemoryInfo();
        am.getMemoryInfo(mi);
        return mi.availMem;
    }

進(jìn)程內(nèi)存

  1. 進(jìn)程內(nèi)存上限:
    //進(jìn)程內(nèi)存上限
    public static int getMemoryMax() {
        return (int) (Runtime.getRuntime().maxMemory()/1024);
    }
  1. 進(jìn)程總內(nèi)存:
    //進(jìn)程總內(nèi)存
    public static int getPidMemorySize(int pid, Context context) {
        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        int[] myMempid = new int[] { pid };
        Debug.MemoryInfo[] memoryInfo = am.getProcessMemoryInfo(myMempid);
        int memSize = memoryInfo[0].getTotalPss();
        //        dalvikPrivateDirty: The private dirty pages used by dalvik。
        //        dalvikPss :The proportional set size for dalvik.
        //        dalvikSharedDirty :The shared dirty pages used by dalvik.
        //        nativePrivateDirty :The private dirty pages used by the native heap.
        //        nativePss :The proportional set size for the native heap.
        //        nativeSharedDirty :The shared dirty pages used by the native heap.
        //        otherPrivateDirty :The private dirty pages used by everything else.
        //        otherPss :The proportional set size for everything else.
        //        otherSharedDirty :The shared dirty pages used by everything else.
        return memSize;
    }

GT3.1開(kāi)源獲取內(nèi)存數(shù)據(jù)代碼:https://github.com/Tencent/GT/blob/ed3a289a897d0ea14676a7c7d92344f5b398991e/android/GT_APP/app/src/main/java/com/tencent/wstt/gt/api/utils/MemUtils.java

CPU篇

CPU:表示進(jìn)程或線程的繁忙程度
獲取CPU主要用兩種方法,一種是利用top 命令或者dumpsys cpuinfo网缝,第二種是讀取/proc/stat文件巨税,然后解析相關(guān)參數(shù),自己去計(jì)算粉臊,下面主要介紹第二種方法草添,也是個(gè)人比較推薦的方法

/proc文件系統(tǒng)是一個(gè)偽文件系統(tǒng),它只存在內(nèi)存當(dāng)中扼仲,而不占用外存空間远寸。它以文件系統(tǒng)的方式為內(nèi)核與進(jìn)程提供通信的接口。用戶和應(yīng)用程序可以通過(guò)/proc得到系統(tǒng)的信息屠凶,并可以改變內(nèi)核的某些參數(shù)驰后。由于系統(tǒng)的信息,如進(jìn)程阅畴,是動(dòng)態(tài)改變的倡怎,所以用戶或應(yīng)用程序讀取/proc目錄中的文件時(shí),proc文件系統(tǒng)是動(dòng)態(tài)從系統(tǒng)內(nèi)核讀出所需信息并提交的贱枣。 從proc文件中可以獲取系統(tǒng)监署、進(jìn)程、線程的cpu時(shí)間片使用情況纽哥,所以兩次采集時(shí)間片的數(shù)據(jù)就可以獲取進(jìn)程CPU占用率钠乏, CPU占用率 = (進(jìn)程T2-進(jìn)程T1)/(系統(tǒng)T2-系統(tǒng)T1) 的時(shí)間片比值。

1.獲取系統(tǒng)CPU時(shí)間片

獲取系統(tǒng)CPU時(shí)間片使用情況:讀取proc/stat春塌,文件的內(nèi)容如下:

    cpu 2032004 102648 238344 167130733 758440 15159 17878 0
    cpu0 1022597 63462 141826 83528451 366530 9362 15386 0
    cpu1 1009407 39185 96518 83602282 391909 5796 2492 0
    intr 303194010 212852371 3 0 0 11 0 0 2 1 1 0 0 3 0 11097365 0 72615114 6628960 0 179 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
    ctxt 236095529
    btime 1195210746
    processes 401389
    procs_running 1
    procs_blocked 0

第一行各個(gè)字段的含義:

    user (14624) 從系統(tǒng)啟動(dòng)開(kāi)始累計(jì)到當(dāng)前時(shí)刻晓避,處于用戶態(tài)的運(yùn)行時(shí)間,不包含 nice值為負(fù)進(jìn)程只壳。 
    nice (771) 從系統(tǒng)啟動(dòng)開(kāi)始累計(jì)到當(dāng)前時(shí)刻俏拱,nice值為負(fù)的進(jìn)程所占用的CPU時(shí)間 
    system (8484) 從系統(tǒng)啟動(dòng)開(kāi)始累計(jì)到當(dāng)前時(shí)刻,處于核心態(tài)的運(yùn)行時(shí)間 
    idle (283052) 從系統(tǒng)啟動(dòng)開(kāi)始累計(jì)到當(dāng)前時(shí)刻吼句,除IO等待時(shí)間以外的其它等待時(shí)間 
    iowait (0) 從系統(tǒng)啟動(dòng)開(kāi)始累計(jì)到當(dāng)前時(shí)刻锅必,IO等待時(shí)間(since 2.5.41) 
    irq (0) 從系統(tǒng)啟動(dòng)開(kāi)始累計(jì)到當(dāng)前時(shí)刻,硬中斷時(shí)間(since 2.6.0-test4) 
    softirq (62) 從系統(tǒng)啟動(dòng)開(kāi)始累計(jì)到當(dāng)前時(shí)刻惕艳,軟中斷時(shí)間(since 2.6.0-test4) 

總的cpu時(shí)間totalCpuTime = user + nice + system + idle + iowait + irq + softirq

2.獲取進(jìn)程和線程的CPU時(shí)間片

獲取進(jìn)程CPU時(shí)間片使用情況:讀取proc/pid/stat搞隐,獲取線程CPU時(shí)間片使用情況:讀取proc/pid/task/tid/stat,這兩個(gè)文件的內(nèi)容相同远搪,如下

    6873 (a.out) R 6723 6873 6723 34819 6873 8388608 77 0 0 0 41958 31 0 0 25 0 3 0 5882654 1409024 56 4294967295 134512640 134513720 3215579040 0 2097798 0 0 0 0 0 0 0 17 0 0 0

各個(gè)字段的含義:

    pid=6873 進(jìn)程(包括輕量級(jí)進(jìn)程劣纲,即線程)號(hào)
    comm=a.out 應(yīng)用程序或命令的名字
    task_state=R 任務(wù)的狀態(tài),R:runnign, S:sleeping (TASK_INTERRUPTIBLE), D:disk sleep (TASK_UNINTERRUPTIBLE), T: stopped, T:tracing stop,Z:zombie, X:dead
    ppid=6723 父進(jìn)程ID
    pgid=6873 線程組號(hào)
    sid=6723 c該任務(wù)所在的會(huì)話組ID
    tty_nr=34819(pts/3) 該任務(wù)的tty終端的設(shè)備號(hào)谁鳍,INT(34817/256)=主設(shè)備號(hào)癞季,(34817-主設(shè)備號(hào))=次設(shè)備號(hào)
    tty_pgrp=6873 終端的進(jìn)程組號(hào)劫瞳,當(dāng)前運(yùn)行在該任務(wù)所在終端的前臺(tái)任務(wù)(包括shell 應(yīng)用程序)的PID。
    task->flags=8388608 進(jìn)程標(biāo)志位绷柒,查看該任務(wù)的特性
    min_flt=77 該任務(wù)不需要從硬盤拷數(shù)據(jù)而發(fā)生的缺頁(yè)(次缺頁(yè))的次數(shù)
    cmin_flt=0 累計(jì)的該任務(wù)的所有的waited-for進(jìn)程曾經(jīng)發(fā)生的次缺頁(yè)的次數(shù)目
    maj_flt=0 該任務(wù)需要從硬盤拷數(shù)據(jù)而發(fā)生的缺頁(yè)(主缺頁(yè))的次數(shù)
    cmaj_flt=0 累計(jì)的該任務(wù)的所有的waited-for進(jìn)程曾經(jīng)發(fā)生的主缺頁(yè)的次數(shù)目
    utime=1587 該任務(wù)在用戶態(tài)運(yùn)行的時(shí)間柠新,單位為jiffies
    stime=1 該任務(wù)在核心態(tài)運(yùn)行的時(shí)間,單位為jiffies
    cutime=0 累計(jì)的該任務(wù)的所有的waited-for進(jìn)程曾經(jīng)在用戶態(tài)運(yùn)行的時(shí)間辉巡,單位為jiffies
    cstime=0 累計(jì)的該任務(wù)的所有的waited-for進(jìn)程曾經(jīng)在核心態(tài)運(yùn)行的時(shí)間,單位為jiffies
    priority=25 任務(wù)的動(dòng)態(tài)優(yōu)先級(jí)
    nice=0 任務(wù)的靜態(tài)優(yōu)先級(jí)
    num_threads=3 該任務(wù)所在的線程組里線程的個(gè)數(shù)
    it_real_value=0 由于計(jì)時(shí)間隔導(dǎo)致的下一個(gè) SIGALRM 發(fā)送進(jìn)程的時(shí)延蕊退,以 jiffy 為單位.
    start_time=5882654 該任務(wù)啟動(dòng)的時(shí)間郊楣,單位為jiffies
    vsize=1409024(page) 該任務(wù)的虛擬地址空間大小
    rss=56(page) 該任務(wù)當(dāng)前駐留物理地址空間的大小
    rlim=4294967295(bytes) 該任務(wù)能駐留物理地址空間的最大值
    start_code=134512640 該任務(wù)在虛擬地址空間的代碼段的起始地址
    end_code=134513720 該任務(wù)在虛擬地址空間的代碼段的結(jié)束地址
    start_stack=3215579040 該任務(wù)在虛擬地址空間的棧的結(jié)束地址
    kstkesp=0 esp(32 位堆棧指針) 的當(dāng)前值, 與在進(jìn)程的內(nèi)核堆棧頁(yè)得到的一致.
    kstkeip=2097798 指向?qū)⒁獔?zhí)行的指令的指針, EIP(32 位指令指針)的當(dāng)前值.
    pendingsig=0 待處理信號(hào)的位圖,記錄發(fā)送給進(jìn)程的普通信號(hào)
    block_sig=0 阻塞信號(hào)的位圖
    sigign=0 忽略的信號(hào)的位圖
    sigcatch=082985 被俘獲的信號(hào)的位圖
    wchan=0 如果該進(jìn)程是睡眠狀態(tài)瓤荔,該值給出調(diào)度的調(diào)用點(diǎn)
    nswap 被swapped的頁(yè)數(shù)净蚤,當(dāng)前沒(méi)用
    cnswap 所有子進(jìn)程被swapped的頁(yè)數(shù)的和,當(dāng)前沒(méi)用
    exit_signal=17 該進(jìn)程結(jié)束時(shí)输硝,向父進(jìn)程所發(fā)送的信號(hào)
    task_cpu(task)=0 運(yùn)行在哪個(gè)CPU上
    task_rt_priority=0 實(shí)時(shí)進(jìn)程的相對(duì)優(yōu)先級(jí)別
    task_policy=0 進(jìn)程的調(diào)度策略今瀑,0=非實(shí)時(shí)進(jìn)程,1=FIFO實(shí)時(shí)進(jìn)程点把;2=RR實(shí)時(shí)進(jìn)程

進(jìn)程的總Cpu時(shí)間processCpuTime = utime + stime + cutime + cstime
線程的總Cpu時(shí)間threadCpuTime = utime + stime + cutime + cstime

兩次采集時(shí)間片的數(shù)據(jù)獲取進(jìn)程CPU占用率
CPU占用率 = (進(jìn)程T2-進(jìn)程T1)/(系統(tǒng)T2-系統(tǒng)T1) 的時(shí)間片比值

我自己封裝的實(shí)時(shí)獲取某進(jìn)程CPU占用率的方法:

    public static double getProcessCpuUsage(String pid) {
        try {
            RandomAccessFile reader = new RandomAccessFile("/proc/stat", "r");
            String load = reader.readLine();
            String[] toks = load.split(" ");

            double totalCpuTime1 = 0.0;
            int len = toks.length;
            for (int i = 2; i < len; i ++) {
                totalCpuTime1 += Double.parseDouble(toks[i]);
            }

            RandomAccessFile reader2 = new RandomAccessFile("/proc/"+ pid +"/stat", "r");
            String load2 = reader2.readLine();
            String[] toks2 = load2.split(" ");

            double processCpuTime1 = 0.0;
            double utime = Double.parseDouble(toks2[13]);
            double stime = Double.parseDouble(toks2[14]);
            double cutime = Double.parseDouble(toks2[15]);
            double cstime = Double.parseDouble(toks2[16]);

            processCpuTime1 = utime + stime + cutime + cstime;

            try {
                Thread.sleep(360);
            } catch (Exception e) {
                e.printStackTrace();
            }
            reader.seek(0);
            load = reader.readLine();
            reader.close();
            toks = load.split(" ");
            double totalCpuTime2 = 0.0;
            len = toks.length;
            for (int i = 2; i < len; i ++) {
                totalCpuTime2 += Double.parseDouble(toks[i]);
            }
            reader2.seek(0);
            load2 = reader2.readLine();
            String []toks3 = load2.split(" ");

            double processCpuTime2 = 0.0;
            utime = Double.parseDouble(toks3[13]);
            stime = Double.parseDouble(toks3[14]);
            cutime = Double.parseDouble(toks3[15]);
            cstime = Double.parseDouble(toks3[16]);

            processCpuTime2 = utime + stime + cutime + cstime;
            double usage = (processCpuTime2 - processCpuTime1) * 100.00
                    / ( totalCpuTime2 - totalCpuTime1);
            BigDecimal b = new BigDecimal(usage);
            double res = b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();
            return res;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e1) {
            e1.printStackTrace();
        }
        return 0.0;
    }

GT3.1開(kāi)源獲取CPU數(shù)據(jù)代碼:https://github.com/Tencent/GT/blob/ed3a289a897d0ea14676a7c7d92344f5b398991e/android/GT_APP/app/src/main/java/com/tencent/wstt/gt/api/utils/CpuUtils.java

流量

流量表示當(dāng)前進(jìn)程網(wǎng)絡(luò)的使用情況
也是有兩種方法橘荠,一種是通過(guò)Android提供的TrafficStats類來(lái)獲取,第二種可以通過(guò)獲取proc文件內(nèi)容來(lái)計(jì)算

先看一下GT3.1采用的第一種方法:
TrafficStats源碼查看
TrafficStats類是由Android提供的一個(gè)從你的手機(jī)開(kāi)機(jī)開(kāi)始郎逃,累計(jì)到現(xiàn)在使用的流量總量哥童,或者統(tǒng)計(jì)某個(gè)或多個(gè)進(jìn)程或應(yīng)用所使用的流量,當(dāng)然這個(gè)流量包括的Wifi和移動(dòng)數(shù)據(jù)網(wǎng)Gprs褒翰。

    //系統(tǒng)流量統(tǒng)計(jì):
    TrafficStats.getTotalRxBytes() ——獲取從此次開(kāi)機(jī)起總接受流量(流量是分為上傳與下載兩類的)贮懈;
    TrafficStats.getTotalTxBytes()——獲取從此次開(kāi)機(jī)起總發(fā)送流量;
    TrafficStats.getMobileRxBytes()——獲取從此次開(kāi)機(jī)起不包括Wifi的接受流量优训,即只統(tǒng)計(jì)數(shù)據(jù)網(wǎng)Gprs接受的流量朵你;
    TrafficStats.getMobileTxBytes()——獲取從此次開(kāi)機(jī)起不包括Wifi的發(fā)送流量,即只統(tǒng)計(jì)數(shù)據(jù)網(wǎng)Gprs發(fā)送的流量揣非;
    //進(jìn)程流量統(tǒng)計(jì):
    TrafficStats.getUidRxBytes(mUid)
     TrafficStats.getUidTxBytes(mUid)   

獲取進(jìn)程流量的方法:
u0_a開(kāi)頭的都是Android的應(yīng)用進(jìn)程抡医,Android的應(yīng)用的UID是從10000開(kāi)始,到19999結(jié)束妆兑。u0_a開(kāi)頭的都是Android的應(yīng)用進(jìn)程魂拦,Android的應(yīng)用的UID是從10000開(kāi)始,到19999結(jié)束搁嗓。

//獲取流量數(shù)據(jù)芯勘,上行和下行
//這里mUid是應(yīng)用的uid,非進(jìn)程id pid腺逛,注意區(qū)分
//uid獲取可根據(jù)包名得到荷愕,方法如下:
public static int getUidByPkgName(String pkgname)  {
        PackageManager pm = getPackageManager();
        try {
            ApplicationInfo ai = pm.getApplicationInfo(pkgname, 0);
            Log.i(TAG,String.valueOf(ai.uid));
            return ai.uid;
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
            return 0;
        }
}
public  static TrafficInfo collect(int mUid) {
        long upload  = TrafficStats.getUidRxBytes(mUid);
        long download = TrafficStats.getUidTxBytes(mUid);
}

GT3.1開(kāi)源獲取流量數(shù)據(jù)代碼:https://github.com/Tencent/GT/blob/ed3a289a897d0ea14676a7c7d92344f5b398991e/android/GT_APP/app/src/main/java/com/tencent/wstt/gt/api/utils/NetUtils.java

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子安疗,更是在濱河造成了極大的恐慌抛杨,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件荐类,死亡現(xiàn)場(chǎng)離奇詭異怖现,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)玉罐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門屈嗤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人吊输,你說(shuō)我怎么就攤上這事饶号。” “怎么了季蚂?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵茫船,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我扭屁,道長(zhǎng)算谈,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任料滥,我火速辦了婚禮濒生,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘幔欧。我一直安慰自己栈戳,他們只是感情好诞挨,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布李滴。 她就那樣靜靜地躺著设拟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪浴井。 梳的紋絲不亂的頭發(fā)上晒骇,一...
    開(kāi)封第一講書(shū)人閱讀 49,749評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音磺浙,去河邊找鬼洪囤。 笑死,一個(gè)胖子當(dāng)著我的面吹牛撕氧,可吹牛的內(nèi)容都是我干的瘤缩。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼伦泥,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼剥啤!你這毒婦竟也來(lái)了锦溪?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤府怯,失蹤者是張志新(化名)和其女友劉穎刻诊,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體牺丙,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡则涯,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了冲簿。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片是整。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖民假,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情龙优,我是刑警寧澤羊异,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站彤断,受9級(jí)特大地震影響野舶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜宰衙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一平道、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧供炼,春花似錦一屋、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)虫腋。三九已至悦冀,卻和暖如春睛琳,著一層夾襖步出監(jiān)牢的瞬間嘿歌,已是汗流浹背茁影。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工募闲, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留靴患,地道東北人要出。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像传于,于是被迫代替她去往敵國(guó)和親囱挑。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

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