新聞中心
在Linux系統(tǒng)下,程序棧是一種運(yùn)行時(shí)堆棧,用于存儲(chǔ)程序中的局部變量、函數(shù)調(diào)用的返回地址以及其他計(jì)算機(jī)程序運(yùn)行所需的數(shù)據(jù)結(jié)構(gòu)。由于??臻g的大小是有限的,當(dāng)程序中的函數(shù)嵌套層數(shù)過深或者局部變量占用空間過大時(shí),就可能導(dǎo)致棧溢出問題。

創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),鄠邑企業(yè)網(wǎng)站建設(shè),鄠邑品牌網(wǎng)站建設(shè),網(wǎng)站定制,鄠邑網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,鄠邑網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
為了解決這些問題,我們需要對(duì)程序棧的空間進(jìn)行監(jiān)測(cè)和調(diào)試,以確保程序的穩(wěn)定性和安全性。在本文中,我們將介紹如何使用Linux來查看程序??臻g,以及如何通過調(diào)試工具來有效地檢測(cè)和解決棧溢出問題。
一、使用gdb調(diào)試工具查看程序棧空間
gdb是Linux下的一種調(diào)試工具,可以用來監(jiān)測(cè)程序中的變量、函數(shù)調(diào)用、內(nèi)存狀態(tài)等信息。使用gdb可以方便地查看程序的??臻g,幫助我們快速排查棧溢出問題。
下面是使用gdb查看程序??臻g的示例步驟:
1. 編譯程序時(shí)加上-g選項(xiàng),生成可調(diào)試的可執(zhí)行文件,以便gdb能夠調(diào)試程序。
2. 打開gdb調(diào)試界面,運(yùn)行可執(zhí)行文件,進(jìn)入到程序的運(yùn)行狀態(tài)。
3. 輸入backtrace或者bt命令,查看程序的函數(shù)調(diào)用棧和當(dāng)前處于哪個(gè)函數(shù)。
4. 輸入frame N,其中N是函數(shù)的編號(hào),查看該函數(shù)的棧幀信息,例如局部變量、參數(shù)、返回地址等。
5. 輸入info variables命令,查看所有的全局變量和局部變量的值。
使用gdb調(diào)試工具可以方便地查看程序的??臻g和調(diào)用棧,但是需要一定的Linux操作和gdb調(diào)試工具的使用經(jīng)驗(yàn),對(duì)初學(xué)者來說有一定難度。
二、使用strace命令查看程序??臻g
strace是Linux下的一種系統(tǒng)調(diào)用跟蹤工具,可以追蹤程序運(yùn)行時(shí)所調(diào)用的系統(tǒng)調(diào)用,攔截其輸入和輸出。我們可以使用strace命令來查看程序的??臻g使用情況,以便快速排查棧溢出問題。
下面是使用strace命令查看程序??臻g的示例步驟:
1. 打開終端,輸入strace -p PID命令,其中PID是運(yùn)行中程序的進(jìn)程ID。例如,strace -p 1234。
2. strace命令會(huì)輸出程序當(dāng)前運(yùn)行的系統(tǒng)調(diào)用信息。我們可以查看其輸出的brk和mmap調(diào)用來確定程序的堆棧空間使用情況。
3. brk調(diào)用表示程序的堆空間使用情況,而mmap調(diào)用則表示程序的??臻g使用情況。
4. 通過查看程序運(yùn)行時(shí)的mmap調(diào)用輸出,我們可以了解程序?qū)嶋H使用的??臻g大小和當(dāng)前可用空間的情況。
使用strace命令也可以方便地查看程序的??臻g使用情況,但是需要一定的Linux操作和strace命令的使用經(jīng)驗(yàn),對(duì)初學(xué)者來說有一定難度。
三、使用valgrind工具查看程序??臻g
valgrind是Linux下的一種內(nèi)存調(diào)試和性能分析工具,可以檢測(cè)程序內(nèi)存泄漏、越界訪問、棧溢出等問題,并提供詳盡的診斷信息。我們可以使用valgrind工具來監(jiān)測(cè)程序的??臻g使用情況,以便快速定位棧溢出問題。
下面是使用valgrind工具查看程序??臻g的示例步驟:
1. 打開終端,輸入valgrind –tool=memcheck可執(zhí)行文件命令,例如,valgrind –tool=memcheck ./test。
2. valgrind會(huì)在程序運(yùn)行的過程中檢測(cè)內(nèi)存泄漏、越界訪問等問題,并提供詳盡的診斷信息。
3. 通過查看valgrind輸出的內(nèi)存分析報(bào)告,我們可以了解程序?qū)嶋H使用的??臻g大小和當(dāng)前可用空間的情況。
使用valgrind工具可以方便地監(jiān)測(cè)程序的??臻g使用情況,同時(shí)提供詳細(xì)的診斷信息,并且對(duì)初學(xué)者也比較友好。
:
本文介紹了三種方法來查看程序的??臻g使用情況,包括gdb調(diào)試工具、strace命令和valgrind工具。每種方法都有其適用場(chǎng)景和使用難度,我們可以根據(jù)具體情況選擇使用合適的方法來監(jiān)測(cè)程序的??臻g使用情況。同時(shí),在編寫程序時(shí),我們也應(yīng)該注意??臻g的使用和釋放,以避免棧溢出和其他內(nèi)存管理問題。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!
如何看linux內(nèi)核占用內(nèi)存大小
# free
total used free shared buffers cached
Mem:
-/+ buffers/cache:4
Swap:
下面是對(duì)這些數(shù)值的解釋:
total:總計(jì)
物理內(nèi)存
的大小。
used:已使用多大。
free:可用有多少。
Shared:多個(gè)進(jìn)程共享的內(nèi)存總額。
Buffers/cached:磁盤緩存的大小。
第三行(-/+ buffers/cached):
used:已使用多大。
free:可用有多少。
第四行就不多解釋了。
區(qū)別:第二行(mem)的used/free與第三行(-/+ buffers/cache) used/free的區(qū)別。 這兩個(gè)的區(qū)別在于使用的角度來看,之一行是從OS的角度來看,因?yàn)閷?duì)于OS,buffers/cached 都是屬于被使用,所以他的可用內(nèi)存是16176KB,已用內(nèi)存是KB,其中包括,內(nèi)核(OS)使用+Application(X, oracle,etc)使用的+buffers+cached.
第三行所指的是從
應(yīng)用程序
角度來看,對(duì)于應(yīng)用程序來說,buffers/cached 是等于可用的,因?yàn)閎uffer/cached是為了提高文件讀取的性能,當(dāng)應(yīng)用程序需在用到內(nèi)存的時(shí)候,buffer/cached會(huì)很快地被回收。
所以從應(yīng)用程序的角度來說,可用內(nèi)存=系統(tǒng)free memory+buffers+cached。
如上例:
=16176+110652+
接下來解釋什么時(shí)候內(nèi)存會(huì)被交換,以及按什么方交換。 當(dāng)可用內(nèi)存少于額定值的時(shí)候,就會(huì)開會(huì)進(jìn)行交換。
如何看額定值:
cat /proc/meminfo
# cat /proc/meminfo
MemTotal:kB
MemFree:kB
Buffers:kB
Cached:kB
SwapCached: 0 kB
Active:kB
Inactive:kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal:kB
LowFree:kB
SwapTotal:kB
SwapFree:kB
Dirty: 8 kB
Writeback: 0 kB
Mapped:kB
Slab:kB
Committed_AS:kB
PageTables: 2340 kB
VmallocTotal:kB
VmallocUsed:kB
VmallocChunk:kB
HugePages_Total: 0
HugePages_Free: 0
Hugepagesize: 2023 kB
用free -m查看的結(jié)果:
# free -m
total used free shared buffers cached
Mem:
-/+ buffers/cache:
Swap:
查看/proc/kcore文件的大?。▋?nèi)存鏡像):
# ll -h /proc/kcore
-r——– 1 root root 4.1G Jun 12 12:04 /proc/kcore
備注:
占用內(nèi)存的測(cè)量
測(cè)量一個(gè)進(jìn)程占用了多少內(nèi)存,linux為我們提供了一個(gè)很方便的方法,/proc目錄為我們提供了所有的信息,實(shí)際上top等工具也通過這里來獲取相應(yīng)的信息。
/proc/meminfo 機(jī)器的內(nèi)存使用信息
/proc/pid/maps pid為進(jìn)程號(hào),顯示當(dāng)前進(jìn)程所占用的虛擬地址。
/proc/pid/statm 進(jìn)程所占用的內(nèi)存
# cat /proc/self/statm
輸出解釋
CPU 以及CPU0。的每行的每個(gè)參數(shù)意思(以之一行為例)為:
參數(shù) 解釋 /proc//status
Size (pages) 任務(wù)虛擬地址空間的大小 VmSize/4
Resident(pages) 應(yīng)用程序正在使用的物理內(nèi)存的大小 VmRSS/4
Shared(pages) 共享頁數(shù) 0
Trs(pages) 程序所擁有的可執(zhí)行
虛擬內(nèi)存
的大小 VmExe/4
Lrs(pages) 被映像到任務(wù)的虛擬內(nèi)存空間的庫的大小 VmLib/4
Drs(pages) 程序數(shù)據(jù)段和用戶態(tài)的棧的大小 (VmData+ VmStk )4
dt(pages) 04
查看機(jī)器可用內(nèi)存
/proc/28248/>free
total used free shared buffers cached
Mem:
-/+ buffers/cache:
Swap:
我們通過free命令查看機(jī)器空閑內(nèi)存時(shí),會(huì)發(fā)現(xiàn)free的值很小。這主要是因?yàn)?,在linux中有這么一種思想,內(nèi)存不用白不用,因此它盡可能的cache和buffer一些數(shù)據(jù),以方便下次使用。但實(shí)際上這些內(nèi)存也是可以立刻拿來使用的。
所以 空閑內(nèi)存=free+buffers+cached=total-used
關(guān)于linux 查看??臻g的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
香港服務(wù)器選創(chuàng)新互聯(lián),香港虛擬主機(jī)被稱為香港虛擬空間/香港網(wǎng)站空間,或者簡(jiǎn)稱香港主機(jī)/香港空間。香港虛擬主機(jī)特點(diǎn)是免備案空間開通就用, 創(chuàng)新互聯(lián)香港主機(jī)精選cn2+bgp線路訪問快、穩(wěn)定!
分享題目:如何用Linux查看程序??臻g?(linux查看??臻g)
URL網(wǎng)址:http://www.dlmjj.cn/article/dpsoihd.html


咨詢
建站咨詢
