国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

記一次 Windows10 內存壓縮 崩潰分析

開發 前端
在給各位朋友免費分析 .NET程序 各種故障的同時,往往也會收到各種其他類型的dump,比如:Windows 崩潰,C++ 崩潰,Mono 崩潰,真的是啥都有,由于基礎知識的相對缺乏,分析起來并不是那么的順利,今天就聊一個 Windows 崩潰的內核dump 吧,這個 dump 是前幾天有位朋友給到我的,讓我幫忙看一下,有了dump之后上 windbg 分析。

一:背景

1. 講故事

在給各位朋友免費分析 .NET程序 各種故障的同時,往往也會收到各種其他類型的dump,比如:Windows 崩潰,C++ 崩潰,Mono 崩潰,真的是啥都有,由于基礎知識的相對缺乏,分析起來并不是那么的順利,今天就聊一個 Windows 崩潰的內核dump 吧,這個 dump 是前幾天有位朋友給到我的,讓我幫忙看一下,有了dump之后上 windbg 分析。

二:WinDbg 分析

1. 從哪里入手

只要是 Windows 平臺上的崩潰,操作系統都會維護一個 EXCEPTION_POINTERS 結構體,這個結構體的解讀對分析問題非常重要,使用 !analyze -v 命令簡要輸出如下:

2: kd> !analyze -v
*******************************************************************************
*                                                                             *
*                        Bugcheck Analysis                                    *
*                                                                             *
*******************************************************************************

UNEXPECTED_STORE_EXCEPTION (154)
The store component caught an unexpected exception.
Arguments:
Arg1: ffffb402b9851000, Pointer to the store context or data manager
Arg2: ffffe607bc53df30, Exception information
Arg3: 0000000000000002, Reserved
Arg4: 0000000000000000, Reserved
...
EXCEPTION_RECORD:  ffffe607bc53eeb8 -- (.exr 0xffffe607bc53eeb8)
ExceptionAddress: fffff80025b04bd0 (nt!RtlDecompressBufferXpressLz+0x0000000000000050)
   ExceptionCode: c0000006 (In-page I/O error)
  ExceptionFlags: 00000000
NumberParameters: 3
   Parameter[0]: 0000000000000000
   Parameter[1]: 0000023f30ee99f0
   Parameter[2]: 00000000c0000185
Inpage operation failed at 0000023f30ee99f0, due to I/O error 00000000c0000185

EXCEPTION_PARAMETER1:  0000000000000000

EXCEPTION_PARAMETER2:  0000023f30ee99f0

CONTEXT:  ffffe607bc53e6f0 -- (.cxr 0xffffe607bc53e6f0)
rax=fffff80025b04b80 rbx=ffff9d808d7fa000 rcx=ffff9d808d7fa000
rdx=ffff9d808d7fa000 rsi=0000000000000002 rdi=0000023f30ee99f0
rip=fffff80025b04bd0 rsp=ffffe607bc53f0f8 rbp=0000023f30eea2fe
 r8=0000023f30ee99f0  r9=0000000000000964 r10=ffff9d808d7faea0
r11=0000023f30eea354 r12=ffffe607bc53f368 r13=ffffb402d84d8000
r14=ffff9d808d7fb000 r15=0000000000000000
iopl=0         nv up ei pl zr na po nc
cs=0010  ss=0000  ds=002b  es=002b  fs=0053  gs=002b             efl=00050246
nt!RtlDecompressBufferXpressLz+0x50:
fffff800`25b04bd0 418b08          mov     ecx,dword ptr [r8] ds:002b:0000023f`30ee99f0=????????
Resetting default scope
...

從卦中信息看,是由于將地址 0000023f30ee99f0 所映射的物理內存頁換入到內存中,拋了一個IO錯誤,從匯編指令 ecx,dword ptr [r8] ds:002b:0000023f30ee99f0=???????? 上也能看的出來。

如果大家不信,可以用 !vtop 和 !pte 觀察下它們對應的物理地址和物理頁號,都是找不到的。

2: kd> !vtop 0 000000006d34aca0
Amd64VtoP: Virt 000000006d34aca0, pagedir 00000003d81fb002
Amd64VtoP: PML4E 00000003d81fb002
Amd64VtoP: PML4E read error 0x8000FFFF
Virtual address 6d34aca0 translation fails, error 0x8000FFFF.

2: kd> !pte 000000006d34aca0
                                           VA 000000006d34aca0
PXE at FFFF86432190C000    PPE at FFFF864321800008    PDE at FFFF864300001B48    PTE at FFFF860000369A50
contains 0000000000000000
contains 0000000000000000
not valid

2. 洞察異常前的線程棧

有了這個初步信息之后,接下來就來觀察異常時的寄存器上下文和線程棧信息,輸出如下:

2: kd> .cxr 0xffffe607bc53e6f0 ; k
rax=fffff80025b04b80 rbx=ffff9d808d7fa000 rcx=ffff9d808d7fa000
rdx=ffff9d808d7fa000 rsi=0000000000000002 rdi=0000023f30ee99f0
rip=fffff80025b04bd0 rsp=ffffe607bc53f0f8 rbp=0000023f30eea2fe
 r8=0000023f30ee99f0  r9=0000000000000964 r10=ffff9d808d7faea0
r11=0000023f30eea354 r12=ffffe607bc53f368 r13=ffffb402d84d8000
r14=ffff9d808d7fb000 r15=0000000000000000
iopl=0         nv up ei pl zr na po nc
cs=0010  ss=0000  ds=002b  es=002b  fs=0053  gs=002b             efl=00050246
nt!RtlDecompressBufferXpressLz+0x50:
fffff800`25b04bd0 418b08          mov     ecx,dword ptr [r8] ds:002b:0000023f`30ee99f0=????????
  *** Stack trace for last set context - .thread/.cxr resets it
 # Child-SP          RetAddr               Call Site
00 ffffe607`bc53f0f8 fffff800`25a5bc10     nt!RtlDecompressBufferXpressLz+0x50
01 ffffe607`bc53f110 fffff800`25a5bb14     nt!RtlDecompressBufferEx+0x60
02 ffffe607`bc53f160 fffff800`25a5b9a1     nt!ST_STORE<SM_TRAITS>::StDmSinglePageCopy+0x150
03 ffffe607`bc53f220 fffff800`25b56ff0     nt!ST_STORE<SM_TRAITS>::StDmSinglePageTransfer+0xa5
04 ffffe607`bc53f270 fffff800`25b57904     nt!ST_STORE<SM_TRAITS>::StDmpSinglePageRetrieve+0x180
05 ffffe607`bc53f310 fffff800`25b57aed     nt!ST_STORE<SM_TRAITS>::StDmPageRetrieve+0xc8
06 ffffe607`bc53f3c0 fffff800`25a5c071     nt!SMKM_STORE<SM_TRAITS>::SmStDirectReadIssue+0x85
07 ffffe607`bc53f440 fffff800`25aad478     nt!SMKM_STORE<SM_TRAITS>::SmStDirectReadCallout+0x21
08 ffffe607`bc53f470 fffff800`25a5cb57     nt!KeExpandKernelStackAndCalloutInternal+0x78
09 ffffe607`bc53f4e0 fffff800`25a5713c     nt!SMKM_STORE<SM_TRAITS>::SmStDirectRead+0xc7
0a ffffe607`bc53f5b0 fffff800`25a56b70     nt!SMKM_STORE<SM_TRAITS>::SmStWorkItemQueue+0x1ac
0b ffffe607`bc53f600 fffff800`25b58727     nt!SMKM_STORE_MGR<SM_TRAITS>::SmIoCtxQueueWork+0xc0
0c ffffe607`bc53f690 fffff800`25b2b94b     nt!SMKM_STORE_MGR<SM_TRAITS>::SmPageRead+0x167
0d ffffe607`bc53f700 fffff800`25ad1020     nt!SmPageRead+0x33
0e ffffe607`bc53f750 fffff800`25ad023d     nt!MiIssueHardFaultIo+0x10c
0f ffffe607`bc53f7a0 fffff800`25a6e818     nt!MiIssueHardFault+0x29d
10 ffffe607`bc53f860 fffff800`25c0b6d8     nt!MmAccessFault+0x468
11 ffffe607`bc53fa00 00007ff8`c3089fa2     nt!KiPageFault+0x358
12 00000067`4ca7f270 00000000`00000000     0x00007ff8`c3089fa2

從卦中的調用棧信息看,代碼的源頭是 用戶態 (0x00007ff8c3089fa2) 過來的,應該是訪問用戶態地址 0000023f30ee99f0 上的內容,由于對應的物理頁不在內存中,觸發了 nt!KiPageFault 中斷,也就是 idt 表中的 0xe 號標記的 缺頁中斷, 輸出如下:

lkd> !idt

Dumping IDT: fffff8050ce87000

00: fffff80506206400 nt!KiDivideErrorFault
...
0e: fffff80506209980 nt!KiPageFault

在缺頁中斷中觸發了 IO 操作 MiIssueHardFaultIo 要從pagefiles 中撈頁面,接下來就是頁讀取邏輯 SmPageRead,最后在 RtlDecompressBufferXpressLz 中引發了藍屏。

如果心比較細的話,你會發現有一個關鍵詞 Decompress ,對,就是解壓縮,為什么換入的page還要解壓縮呢?這就是我們的突破點。

3. 為什么會解壓縮

要找到這個問題的答案,需要觀察下這個異常線程的詳細信息,可以用 .thread 切到異常的線程上下文,再用 !thread 觀察。

2: kd> .thread
Implicit thread is now ffffb402`be04a080

2: kd> !thread ffffb402`be04a080
THREAD ffffb402be04a080  Cid 0594.2228  Teb: 000000674c5b8000 Win32Thread: 0000000000000000 RUNNING on processor 2
Not impersonating
GetUlongFromAddress: unable to read from fffff8002641152c
Owning Process            ffffb402b8d58080       Image:         <Invalid process>
Attached Process          ffffb402b984a040       Image:         MemCompression
fffff78000000000: Unable to get shared data
Wait Start TickCount      649763       
Context Switch Count      9              IdealProcessor: 0             
ReadMemory error: Cannot get nt!KeMaximumIncrement value.
UserTime                  00:00:00.000
KernelTime                00:00:00.000
Win32 Start Address 0x00007ff8c808afb0
Stack Init ffffe607bc53fb90 Current ffffe607bc53e800
Base ffffe607bc540000 Limit ffffe607bc539000 Call 0000000000000000
Priority 8 BasePriority 7 PriorityDecrement 0 IoPriority 2 PagePriority 2
Child-SP          RetAddr               : Args to Child                                                           : Call Site
ffffe607`bc53de78 fffff800`25d9856e     : 00000000`00000154 ffffb402`b9851000 ffffe607`bc53df30 00000000`00000002 : nt!KeBugCheckEx
ffffe607`bc53de80 fffff800`25c189db     : ffffb402`b9851000 ffffe607`bc53df30 ffffe607`00000002 ffffe607`bc53dfe0 : nt!SMKM_STORE<SM_TRAITS>::SmStUnhandledExceptionFilter+0x7e
ffffe607`bc53ded0 fffff800`25bcfb1f     : fffff800`00000002 fffff800`258d905c ffffe607`bc539000 ffffe607`bc540000 : nt!`SMKM_STORE<SM_TRAITS>::SmStDirectReadIssue'::`1'::filt$0+0x22
ffffe607`bc53df00 fffff800`25c062ff     : fffff800`258d905c ffffe607`bc53e4e0 fffff800`25bcfa80 00000000`00000000 : nt!_C_specific_handler+0x9f
...

從卦中信息看,異常線程還有一個附加的進程 ffffb402b984a040,來自于 MemCompression 模塊,從名字上看所謂的 壓縮解壓縮 邏輯應該和它有關系,接下來到網上去搜一下,有一篇文章說的非常好:https://www.howtogeek.com/319933/what-is-memory-compression-in-windows-10/

大意:這是 Windows10 新增的一個功能,用內存壓縮技術讓RAM中可以存儲更多的內存頁,相比傳統的交換到 PageFiles.sys 有更高的性能,缺點就是需要耗費一些解壓縮需要的 CPU 時間。

在 Windows10 上也能窺探一二:

圖片

4. 問題解決

解決辦法很簡單,學 4S 店的問題解決之道,能換的就堅決不修,讓朋友把 內存壓縮 給關掉,這樣就不走RtlDecompressBufferXpressLz 邏輯,理論上就不會有什么問題了。

圖片

關閉之后,據朋友反饋,這幾天沒有崩潰了。

三:總結

分析內核態相比用戶態難度要大的多,需要對操作系統以及CPU的相關知識有一個比較深度的理解,任重道遠。。。

責任編輯:武曉燕 來源: 一線碼農聊技術
相關推薦

2023-06-26 00:12:46

2024-12-27 13:31:18

.NETdump調試

2024-03-28 12:56:36

2023-03-26 20:24:50

ERP網站系統

2024-07-12 11:20:34

.NET崩潰視覺程序

2024-03-26 00:44:53

.NETCIM系統

2024-07-09 11:51:20

Windows線程池源碼

2025-10-29 01:11:00

.NET系統windows

2023-06-29 17:55:00

.NET日志WinDbg

2024-05-31 12:56:06

.NET代碼方法

2022-10-25 14:17:01

.NET代碼程序

2024-06-13 17:09:55

2024-06-04 10:54:34

.NET代碼程序

2021-03-05 07:14:08

Linuxcrashvmcore

2022-02-08 17:17:27

內存泄漏排查

2023-07-06 10:11:38

.NET模式dump

2021-11-23 21:21:07

線上排查服務

2025-09-05 02:22:00

.NETCRM物流行業

2021-11-02 07:54:41

內存.NET 系統

2021-04-29 07:33:40

內存API程序
點贊
收藏

51CTO技術棧公眾號

精品日产免费二区日产免费二区| 欧美白嫩的18sex少妇| 91在线丨porny丨国产| 中文字幕成在线观看| 精品国产欧美一区二区| 伊人精品综合| 欧美精品一区二区三区在线四季 | 水蜜桃久久夜色精品一区的特点| 成人午夜免费在线视频| 日本高清不卡视频| 国产精品1luya在线播放| 免费观看中文字幕| 精品亚洲一区二区三区| 欧美成人一二区| 亚洲精品蜜桃久久久久久| 欧美不卡视频一区| 欧美性猛交一区二区三区精品| 国产精品无码2021在线观看| 影音先锋在线亚洲| 久久久久久久香蕉网| 9色精品在线| 天堂在线第六区| 亚洲国产日韩综合久久精品| 国产三级电影在线| 国产精品成人网| 男女激烈动态图| 中文字幕欧美三区| 欧美日韩亚洲一区在线观看| 在线观看黄av| 国产精品免费观看高清| 欧美精品一区二区三区很污很色的| 国产亚洲自拍一区| 亚洲美女色禁图| 成人在线免费观看网站| 日本国产一区| 日本亚洲导航| 国产在线视频不卡| 欧美一区二区三区精品电影| 综合激情网站| 精品麻豆剧传媒av国产九九九| 亚洲欧美自偷自拍另类| 国产中文字幕91| 欧美亚洲精品一区| 中文一区在线播放| 成人一区二区三区中文字幕| 黑色丝袜福利片av久久| 9999在线视频| www.xxx黄| 中文字幕在线三区| 欧美成人午夜影院| 亚洲女人av| 高清成人av| 国产丝袜一区二区三区| 欧美日韩91| heyzo视频在线播放| 日韩在线一区二区三区免费视频| 亚洲国产专区| 免费观看v片在线观看| 欧美另类极品videosbestfree| 欧美96一区二区免费视频| 天堂а√在线8种子蜜桃视频| 久久99久久久久久久噜噜| 国产精品 欧美精品| 91黄色在线| 国产日韩三区| 精品女同一区二区三区在线播放| 精品精品精品| 亚洲 激情 在线| 久久深夜福利免费观看| 国产精品一区二区久久精品爱涩| eeuss影院在线播放| 91精品久久久久久久久久久久久| 亚洲欧美在线观看| 亚洲乱码一区| 1024av视频| 久久精品国产91精品亚洲| 粉嫩av一区二区三区| 中文在线免费二区三区| 熟妇熟女乱妇乱女网站| 亚洲精品日韩丝袜精品| 国产一区二三区| 自拍偷拍欧美视频| 超级碰在线观看| 国产一区av在线| 国产91色综合久久免费分享| 精品国产欧美日韩一区二区三区| 韩国黄色一级大片| 国产亚洲一区二区精品| 成人av动漫在线| 在线观看亚洲精品福利片| 国产成人无码av在线播放dvd| 久久五月情影视| 久久婷婷一区二区三区| 成人香蕉社区| 独立日3在线观看完整版| 国产成人精品视频在线| 亚洲.国产.中文慕字在线| 日本大胆欧美| 久久精品蜜桃| 免费看成人午夜电影| 精品免费视频.| 国产成人在线观看免费网站| 日韩毛片免费看| 国产一二三区av| 国产91亚洲精品| 欧美日韩激情视频8区| 亚洲高清自拍| a国产在线视频| 日本人体一区二区| 久久久亚洲国产| 一区二区三区美女| 欧美日韩一卡| 国产不卡人人| 国产一级片黄色| 国产精品欧美久久久| 亚洲成av人片一区二区三区| 伊人激情综合| 电影一区二区三| 国产高潮免费视频| 亚洲一区二区三区xxx视频| 欧美一区二区在线视频| 国产激情偷乱视频一区二区三区| 国产精品毛片无码| 最新地址在线观看| 六月婷婷久久| 日韩亚洲第一页| 亚瑟在线精品视频| 蜜桃视频一区二区| 久久a级毛片毛片免费观看| 国产在线一在线二| 91传媒免费视频| 91黑丝高跟在线| 欧美久久一二三四区| 不卡在线观看av| 9999国产精品| 厕沟全景美女厕沟精品| 国产a国产a国产a| 久久精品国产理论片免费| 色噜噜久久综合伊人一本| 图片区小说区国产精品视频| 美国欧美日韩国产在线播放 | 1024国产精品| 激情偷拍久久| 91精品影视| 一卡二卡三卡亚洲| eeuss中文| 国产精品久久久久99| 亚洲电影第1页| 亚洲欧洲av一区二区三区久久| 亚洲一区观看| 成人在线视频中文字幕| 免费**毛片在线| 777视频在线| 热舞福利精品大尺度视频| 欧美激情一区二区久久久| 欧美日韩高清一区| 国产精品麻豆网站| 毛片av一区二区三区| 清纯唯美亚洲综合一区| 亚洲日本在线观看视频| 国产一二三在线观看| 欧美视频免费播放| 日韩欧美一区二区在线观看| 日本一区二区在线播放| 日韩h在线观看| 欧美日韩在线免费| 26uuu国产在线精品一区二区| 99热精品在线观看| 国产毛片久久久| 天堂中文av在线资源库| 亚亚洲欧洲精品| 国产一区二区视频免费在线观看| 蜜桃传媒视频第一区入口在线看| 欧亚精品中文字幕| 福利视频导航一区| 欧美在线欧美在线| 亚洲一区美女| 中文字幕在线网| 国产精品sm| 国产日韩视频一区二区三区| 日韩视频不卡中文| 欧美日韩成人在线一区| 久久久久国产一区二区三区| av日韩免费电影| 亚洲人成无码www久久久| 在线观看的网站你懂的| aaa欧美日韩| 91精品国产综合久久香蕉922| 午夜av在线播放| 欧美国产日韩a欧美在线观看| 国产日韩欧美另类| 精品视频一区二区三区四区五区| 亚洲黄色免费网站| 真人抽搐一进一出视频| 午夜天堂精品久久久久| 亚洲综合丁香婷婷六月香| 色777狠狠综合秋免鲁丝| 九色视频成人porny| www.国产二区| 日本在线成人|