日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
深入LinuxCrash分析,解決故障問題(linuxcrash分析)

隨著互聯(lián)網(wǎng)的普及和計算機技術(shù)的發(fā)展,Linux系統(tǒng)越來越受到廣泛的關(guān)注和應(yīng)用。然而,隨著系統(tǒng)的復(fù)雜度不斷提升,Linux系統(tǒng)出現(xiàn)故障的情況也越來越普遍,這不僅影響到系統(tǒng)運行的穩(wěn)定性,還影響到工作效率和用戶體驗。為了更好地解決Linux系統(tǒng)故障問題,本文將深入分析Linux Crash的原因,并提出解決方案。

一、Linux Crash常見原因

1.硬件故障:可能是內(nèi)存、硬盤、網(wǎng)卡等硬件設(shè)備失效,導(dǎo)致系統(tǒng)無法正常工作。例如,硬盤損壞可能導(dǎo)致Linux系統(tǒng)無法啟動,網(wǎng)卡故障可能導(dǎo)致網(wǎng)絡(luò)連接失敗。

2.軟件相關(guān)的錯誤:可能是內(nèi)核漏洞、驅(qū)動程序錯誤、進程崩潰等。例如,進程崩潰可能是由于內(nèi)存泄漏或錯誤的代碼實現(xiàn)導(dǎo)致,內(nèi)核漏洞可能導(dǎo)致系統(tǒng)死機或崩潰。

3.配置錯誤:可能是由于錯誤的配置導(dǎo)致系統(tǒng)無法正常工作。例如,錯誤的配置IP地址、DNS服務(wù)器等,可能導(dǎo)致網(wǎng)絡(luò)連接失敗。

二、如何分析Linux Crash

對于Linux系統(tǒng)的Crash,我們需要進行詳細的分析,以找到問題的原因,并采取相應(yīng)的解決方法。

1.收集系統(tǒng)日志

包括系統(tǒng)日志、內(nèi)核日志和應(yīng)用程序日志。通過查看日志,可以得到系統(tǒng)的運行情況,從而找到系統(tǒng)在何時出現(xiàn)Crash。

2.查看內(nèi)存信息

可以使用系統(tǒng)自帶的工具來查看內(nèi)存使用情況,如top和ps等工具。通過查看內(nèi)存使用情況,可以找到是否存在內(nèi)存泄漏等問題,從而排除內(nèi)存問題引起的Crash。

3.使用Crash工具分析

Crash工具是一款開源的命令行調(diào)試工具,它可以幫助用戶分析系統(tǒng)Crash時的內(nèi)核轉(zhuǎn)儲文件。通過Crash工具的使用,可以找到內(nèi)核中出現(xiàn)問題的位置,并查看相關(guān)的堆棧信息,從而找到問題的原因。

三、如何解決Linux Crash問題

一旦發(fā)現(xiàn)了Crash的原因,我們需要采取相應(yīng)的解決方法以恢復(fù)系統(tǒng)的正常運行。以下是常見的Linux Crash解決方法。

1.檢查硬件設(shè)備

如果是硬件故障引起的Crash,我們需要檢查相應(yīng)的硬件設(shè)備,如內(nèi)存、硬盤、網(wǎng)卡等,找到問題并進行修復(fù)或更換。

2.升級或修復(fù)軟件

如果是軟件相關(guān)的問題引起的Crash,我們需要找到具體的軟件問題,并進行升級或修復(fù)。例如,更新內(nèi)核或者更新應(yīng)用程序。

3.正確設(shè)置系統(tǒng)配置

如果是配置問題引起的Crash,我們需要找到問題,并進行正確的設(shè)置。例如,設(shè)置正確的IP地址、DNS服務(wù)器等配置信息。

結(jié)論

Linux Crash是Linux系統(tǒng)中常見的問題之一,它可能來自硬件故障、軟件錯誤或者配置錯誤等多種因素。通過深入的分析、收集日志信息、查看內(nèi)存信息以及使用Crash工具進行分析,我們可以找到問題的根本原因。一旦找到問題,我們就可以采取相應(yīng)的措施,如升級軟件、更換硬件設(shè)備或者設(shè)置正確的系統(tǒng)配置,以解決Linux Crash問題,保證系統(tǒng)的穩(wěn)定運行。

相關(guān)問題拓展閱讀:

  • 怎樣解決crash dump error

怎樣解決crash dump error

Memory錯誤

在內(nèi)核中,內(nèi)存是以cache的形式組織的,每個對象類型對應(yīng)一個cache,如(inod_cache,dentry_cache, buffer_head,vm_area_strutct等);每個cache包含多個slab(slab由一個或多個頁組成,這些頁物理上是連續(xù)的);每個slab包含多爛氏個初始化的對象。

Cache可以分為兩類【kmalloc使用的和其他】,當(dāng)然他們是用同一個函數(shù)創(chuàng)建的。

1.Crash> Kmem -s

CACHE NAME OBIZE ALLOCATED TOTAL SLABS SSIZE

ee2bb0c0 scsi_sense_cachek

ee2bbac0 scsi_cmd_cachek

ee000c60 sizek

ee000bc0 sizek

ee000b20 sizek

ee000a80 sizek

ee0009e0 sizek

eesizek

ee0008a0 sizek

eesizek

eesizek

ee0006c0 sizek

eesizek

eesizek

ee0004e0 sizek

eesizek

ee0003a0 size 6 4k

eesizek

eesizek

ee0001c0 sizek

eesizek

eesizek

調(diào)用唯正函數(shù)kmalloc(xxx)得到的memory都來名字為size-xx的cache.

2.CONFIG_DEBUG_SLAB

為便于調(diào)試,在每個對象可以添加SLAB_RED_ZONE,添加這塊內(nèi)存的最后使用者SLAB_STORE_USER,且用SLAB_POISON初始化對象。

這些特殊的元素是什么?

Include/linux/poison.h

/*

*Magic nums for obj red zoning.

*Placed in the first word before and the first word after an obj.

*/

#define RED_INACTIVE 0x09F911029D74E35BULL /*when obj is inactive */

#define RED_ACTIVE 0xD84156CC0ULL /*when obj is active */

/*…and for poisoning */

#define POISON_INUSE 0x5a /*for use-uninitialised poisoning */

#definePOISON_FREE 0x6b /* foruse-after-free poisoning */

#define POISON_END 0xa5 /*end-byte of poisoning */

3.log | tail xxx

當(dāng)slab出錯時,會把cachename/ objecet的開始地址(沒有考慮redzone)

redzone的內(nèi)容/lastuser和指歷悔object的內(nèi)容都會打印出來,另外還包含該對象前后對象的信息。

Slab corruption (Not tainted): size-64 start=e74b3398,len=64

Redzone: 0x9f911029d74e35b/0x9f911029d74e35b.

Last user: (__DWC_FREE+0x1c/0x20)

010: 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b 6b d8 b0 54 e8 kkkkkkkkkkkk..T.

Prev obj: start=e74b3340, len=64

Redzone: 0xd84156cc0/0xd84156cc0.

Last user:(binder_get_ref_for_node+0x6c/0x204)

000:c 8b e5 eG4..,………..

010: f1 31 4b ee5 ee.1K.P….Fa…..

Next obj: start=e74b33f0, len=64

Redzone: 0xd84156cc0/0xd84156cc0.

Last user: (copy_creds+0x108/0x1e4)

000:a 5a 5a 5aa 5a 5a 5a ….ZZZZ….ZZZZ

010: ad 4e ad de ff ff ff ff ff ff ff ff.N…………..

kernel BUG atmm/slab.c:2023!

Internal error: Oops – BUG: 0 PREEMPT P ARM

Modules linked in:

CPU: 0 Not tainted (3.4.0-gc37fe8c-dirty #657)

PC is at check_poison_obj+0x194/0x1b4

LR is at console_unlock+0x1c0/0x1d4

pc : lr : psr:

sp : e58e1c68 ip : e58e1a40 fp : e58e1c9c

r10: e74b3398 r9 :r8 : e74b3338

r7 :r6 : e74b3000 r5 : e74b33e8 r4 :ee000080

r3 :r2 :r1 :r0 :e74b33f0

Flags: nZCv IRQs off FIQs on Mode SVC_32 ISA ARM Segment kernel

Control: 10c53c7d Table: af4e404a DAC:

kmem-S size-64

從打印的信息siize-64start=e74b3398, 得知出問題的是cache:size-64,地址為

e74b3390.

4.Crash> kmem -S cache name

crash>kmem -S size-64 | grep e74b3390

crash>rd e74b3390 0x64

e74b3390: 9d74e35b 09fb6b6b6b6b6b6b6b

e74b33a0: 6b6b6b6b 6b6b6b6b 6b6b6b6b 6b6b6b6b kkkkkkkkkkkkkkkk

e74b33b0: 6b6b6b6b e854b0d8 6b6b6b6b6b6b6b6b kkkk..T.kkkkkkkk

e74b33c0: 6b6b6b6b 6b6b6b6b 6b6b6b6b 6b6b6b6b kkkkkkkkkkkkkkkk

e74b33d0: 6b6b6b6b a56b6b6b 9d74e35b09f91102 kkkkkkk.

e74b33e0: ffc03446e8

從出問題的這個object的用于debug的信息可知:

redzone: 9d74e35b 09f91102 :RED_INACTIVE

poisondata: 6b : POISON_FREE

usercall : c03446e8

5.last caller

最后操作這塊內(nèi)存的函數(shù)為:

crash>dis -r c03446e8

0xc03446cc: mov r12, sp

0xc03446d0: push {r11, r12, lr, pc}

0xc03446d4: sub r11, r12, #4

0xc03446d8: stmfd sp!, {lr}

0xc03446dc: ldmfd sp!, {lr}

0xc03446e0: mov r0, r1

0xc03446e4: bl 0xc00d51fc

0xc03446e8: ldm sp, {r11, sp, pc}

結(jié)合如下的backtrace,可知問題就是從slab申請的一個對象,但發(fā)現(xiàn)其中的元素不對(不是0x6b,卻出現(xiàn)了e854b0d8,所以crash)

kernel BUG at mm/slab.c:2023!

Backtrace:

(check_poison_obj+0x0/0x1b4) from (cache_alloc_debugcheck_after+0x3c/0x1a0)

(cache_alloc_debugcheck_after+0x0/0x1a0) from (__kmalloc+0x140/0x234)

r7:r6:r5:ar4:ee000080

(__kmalloc+0x0/0x234) from (__DWC_ALLOC_ATOMIC+0x20/0x24)

(__DWC_ALLOC_ATOMIC+0x0/0x24) from (dwc_otg_hcd_urb_alloc+0x30/0x40)

(dwc_otg_hcd_urb_alloc+0x0/0x40)from (urb_enqueue+0xf0/0x258)

r4:db95faa8 r3:

(urb_enqueue+0x0/0x258) from (u_hcd_submit_urb+0x5c4/0x6a4)

(u_hcd_submit_urb+0x0/0x6a4) from (u_submit_urb+0x2a0/0x2bc)

(u_submit_urb+0x0/0x2bc) from (u_sg_wait+0x4c/0x138)

6.解決問題

從上面的分析可知,問題是memoryfree后,代碼又操作了這塊內(nèi)存。

現(xiàn)在問題是__DWC_FREE最后操作了這塊內(nèi)存,__DWC_FREE只是封裝了kfree,

如果直接使用kfree,通過SLAB_STORE_USER就可以知道那個函數(shù)調(diào)用了kfree,

進而知道申請的對象類型,看那個該對象類型的那個成員被賦值,就可以在代碼中搜索。

如該例知道了類型為dwc_otg_qtd_t,且成員qh在內(nèi)存釋放后被賦值,就可以在代碼中詳細查找,分析。

crash>dwc_otg_qtd_t e74b3398

structdwc_otg_qtd_t {

data_toggle= 0x6b,

control_phase= (DWC_OTG_CONTROL_DATA | DWC_OTG_CONTROL_STATUS | unknown:),

complete_split= 0x6b,

ssplit_out_xfer_count= 0x6b6b6b6b,

error_count= 0x6b,

isoc_frame_index= 0x6b6b,

isoc_split_pos= 0x6b,

isoc_split_offset= 0x6b6b,

urb= 0x6b6b6b6b,

qh= 0xe854b0d8,

qtd_list_entry= {

cqe_next= 0x6b6b6b6b,

cqe_prev= 0x6b6b6b6b

},

in_process= 0x6b,

n_desc= 0x6b,

isoc_frame_index_last= 0x6b6b

}

在相關(guān)的代碼中搜索哪里操作了

數(shù)據(jù)結(jié)構(gòu)

dwc_otg_qtd_t的qh成員。

出現(xiàn)CrashDump:

重啟電腦-按F8鍵,出現(xiàn)開機慶叢或菜單時,選擇,最后一次正確設(shè)置,回車試試。鄭源

或進入安全模式進入后殺毒、重啟。

關(guān)于linux crash 分析的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。

香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗。專業(yè)提供云主機、虛擬主機、域名注冊、VPS主機、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。


當(dāng)前題目:深入LinuxCrash分析,解決故障問題(linuxcrash分析)
路徑分享:http://www.5511xx.com/article/cddsgio.html