anonhugepage挖礦
『壹』 如何查看Linux內存中的程序所有堆的地址
linux 下面查看內存有多種渠道,比如通過命令 ps ,top,free 等,比如通過/proc系統,一般需要比較詳細和精確地知道整機內存/某個進程內存的使用情況,最好通過/proc 系統,下面介紹/proc系統下內存相關的幾個文件
單個進程的內存查看 cat /proc/[pid] 下面有幾個文件: maps , smaps, status
maps 文件可以查看某個進程的代碼段、棧區、堆區、動態庫、內核區對應的虛擬地址,如果你還不了解linux進程的內存空間,可以參考這里。
下圖是maps文件內存示例
Develop>cat /proc/self/maps
00400000-0040b000 r-xp 00000000 fd:00 48 /mnt/cf/orig/root/bin/cat
0060a000-0060b000 r--p 0000a000 fd:00 48 /mnt/cf/orig/root/bin/cat
0060b000-0060c000 rw-p 0000b000 fd:00 48 /mnt/cf/orig/root/bin/cat 代碼段
0060c000-0062d000 rw-p 00000000 00:00 0 [heap] 堆區
7f1fff43b000-7f1fff5d4000 r-xp 00000000 fd:00 861 /mnt/cf/orig/root/lib64/libc-2.15.so
7f1fff5d4000-7f1fff7d3000 ---p 00199000 fd:00 861 /mnt/cf/orig/root/lib64/libc-2.15.so
7f1fff7d3000-7f1fff7d7000 r--p 00198000 fd:00 861 /mnt/cf/orig/root/lib64/libc-2.15.so
7f1fff7d7000-7f1fff7d9000 rw-p 0019c000 fd:00 861 /mnt/cf/orig/root/lib64/libc-2.15.so
7f1fff7d9000-7f1fff7dd000 rw-p 00000000 00:00 0
7f1fff7dd000-7f1fff7fe000 r-xp 00000000 fd:00 2554 /mnt/cf/orig/root/lib64/ld-2.15.so
7f1fff9f9000-7f1fff9fd000 rw-p 00000000 00:00 0
7f1fff9fd000-7f1fff9fe000 r--p 00020000 fd:00 2554 /mnt/cf/orig/root/lib64/ld-2.15.so
7f1fff9fe000-7f1fff9ff000 rw-p 00021000 fd:00 2554 /mnt/cf/orig/root/lib64/ld-2.15.so
7f1fff9ff000-7f1fffa00000 rw-p 00000000 00:00 0
7fff443de000-7fff443ff000 rw-p 00000000 00:00 0 [stack] 用戶態棧區
7fff443ff000-7fff44400000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall] 內核區
有時候可以通過不斷查看某個進程的maps文件,通過查看其虛擬內存(堆區)是否不停增長來簡單判斷進程是否發生了內存溢出。
maps文件只能顯示簡單的分區,smap文件可以顯示每個分區的更詳細的內存佔用數據
下圖是smaps文件內存示例, 實際顯示內容會將每一個區都顯示出來,下面我只拷貝了代碼段和堆區,
每一個區顯示的內容項目是一樣的,smaps文件各項含義可以參考這里
Develop>cat /proc/self/smaps
00400000-0040b000 r-xp 00000000 fd:00 48 /mnt/cf/orig/root/bin/cat
Size: 44 kB 虛擬內存大小
Rss: 28 kB 實際使用物理內存大小
Pss: 28 kB
Shared_Clean: 0 kB 頁面被改,則是dirty,否則是clean,頁面引用計數>1,是shared,否則是private
Shared_Dirty: 0 kB
Private_Clean: 28 kB
Private_Dirty: 0 kB
Referenced: 28 kB
Anonymous: 0 kB
AnonHugePages: 0 kB
Swap: 0 kB 處於交換區的頁面大小
KernelPageSize: 4 kB 操作系統一個頁面大小
MMUPageSize: 4 kB 體系結構MMU一個頁面大小
Locked: 0 kB
0060c000-0062d000 rw-p 00000000 00:00 0 [heap]
Size: 132 kB
Rss: 8 kB
Pss: 8 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 0 kB
Private_Dirty: 8 kB
Referenced: 8 kB
Anonymous: 8 kB
AnonHugePages: 0 kB
Swap: 0 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Locked: 0 kB
下圖是status文件內存示例, 加粗部分是內存相關的統計,
Develop>cat /proc/24475/status
Name: netio 可執行程序的名字
State: R (running) 任務狀態,運行/睡眠/僵死
Tgid: 24475 線程組號
Pid: 24475 進程id
PPid: 19635 父進程id
TracerPid: 0
Uid: 0 0 0 0
Gid: 0 0 0 0
FDSize: 256 該進程最大文件描述符個數
Groups: 0
VmPeak: 6330708 kB 內存使用峰值
VmSize: 268876 kB 進程虛擬地址空間大小
VmLck: 0 kB 進程鎖住的物理內存大小,鎖住的物理內存無法交換到硬碟
VmHWM: 16656 kB
VmRSS: 11420 kB 進程正在使用的物理內存大小
VmData: 230844 kB 進程數據段大小
VmStk: 136 kB 進程用戶態棧大小
VmExe: 760 kB 進程代碼段大小
VmLib: 7772 kB 進程使用的庫映射到虛擬內存空間的大小
VmPTE: 120 kB 進程頁表大小
VmSwap: 0 kB
Threads: 5
SigQ: 0/63346
SigPnd: 0000000000000000
ShdPnd: 0000000000000000
SigBlk: 0000000000000000
SigIgn: 0000000001000000
SigCgt: 0000000180000000
CapInh: 0000000000000000
CapPrm: ffffffffffffffff
CapEff: ffffffffffffffff
CapBnd: ffffffffffffffff
Cpus_allowed: 01
Cpus_allowed_list: 0
Mems_allowed: 01
Mems_allowed_list: 0
voluntary_ctxt_switches: 201
nonvoluntary_ctxt_switches: 909
可以看到,linux下內存佔用是一個比較復雜的概念,不能
簡單通過一個單一指標就判斷某個程序「內存消耗」大小,原因有下面2點:
進程所申請的內存不一定真正會被用到(malloc或mmap的實現)
真正用到了的內存也不一定是只有該進程自己在用 (比如動態共享庫)
關於內存的使用分析及本文幾個命令的說明也可以參考這里
下面是查看整機內存使用情況的文件 /proc/meminfo
Develop>cat /proc/meminfo
MemTotal: 8112280 kB 所有可用RAM大小 (即物理內存減去一些預留位和內核的二進制代碼大小)
MemFree: 4188636 kB LowFree與HighFree的總和,被系統留著未使用的內存
Buffers: 34728 kB 用來給文件做緩沖大小
Cached: 289740 kB 被高速緩沖存儲器(cache memory)用的內存的大小
(等於 diskcache minus SwapCache )
SwapCached: 0 kB 被高速緩沖存儲器(cache memory)用的交換空間的大小
已經被交換出來的內存,但仍然被存放在swapfile中。
用來在需要的時候很快的被替換而不需要再次打開I/O埠
Active: 435240 kB 在活躍使用中的緩沖或高速緩沖存儲器頁面文件的大小,
除非非常必要否則不會被移作他用
Inactive: 231512 kB 在不經常使用中的緩沖或高速緩沖存儲器頁面文件的大小,可能被用於其他途徑.
Active(anon): 361252 kB
Inactive(anon): 120688 kB
Active(file): 73988 kB
Inactive(file): 110824 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 0 kB 交換空間的總大小
SwapFree: 0 kB 未被使用交換空間的大小
Dirty: 0 kB 等待被寫回到磁碟的內存大小
Writeback: 0 kB 正在被寫回到磁碟的內存大小
AnonPages: 348408 kB 未映射頁的內存大小
Mapped: 33600 kB 已經被設備和文件等映射的大小
Shmem: 133536 kB
Slab: 55984 kB 內核數據結構緩存的大小,可以減少申請和釋放內存帶來的消耗
SReclaimable: 25028 kB 可收回Slab的大小
SUnreclaim: 30956 kB 不可收回Slab的大小(SUnreclaim+SReclaimable=Slab)
KernelStack: 1896 kB 內核棧區大小
PageTables: 8156 kB 管理內存分頁頁面的索引表的大小
NFS_Unstable: 0 kB 不穩定頁表的大小
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 2483276 kB
Committed_AS: 1804104 kB
VmallocTotal: 34359738367 kB 可以vmalloc虛擬內存大小
VmallocUsed: 565680 kB 已經被使用的虛擬內存大小
VmallocChunk: 34359162876 kB
HardwareCorrupted: 0 kB
HugePages_Total: 1536 大頁面數目
HugePages_Free: 0 空閑大頁面數目
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB 大頁面一頁大小
DirectMap4k: 10240 kB
DirectMap2M: 8302592 kB
『貳』 在BAT工作的開發人員電腦是什麼樣的配置
在BAT工作的人都知道裡面的個人競爭十分激烈,頭腦不容易。這是對學生的平均水平的一般參考,對於特別優秀的人,無論他們在哪裡都會有自己的閃光點。
同時,接受沒有自己生活的狀態。講到電腦配置的問題,在BAT裡面工作,電腦肯定是要高配置的,不能用著用著就卡的那種,可以先在網上了解一下電腦的品牌,比如像蘋果啊,外星人,惠普啊等等這些知名品牌,了解一下他們的參數,或者看一下網友對這個牌子的評價,慎重考慮購買。也可以自己去了解一下電腦方面的知識,比如電腦的內存大小,CPU運行等等。
『叄』 如何將Transparent HugePages關閉
一、分析前的准備工作
1. 查看內存
[ruby] view plain
#cat /proc/meminfo
MemTotal: 903640 kB //總計物理內存的大小
MemFree: 455024 kB //可用內存有多少
Buffers: 10928 kB //磁碟緩存內存的大小
Cached: 189004 kB
SwapCached: 0 kB
Active: 184708 kB
Inactive: 158564 kB
Active(anon): 143364 kB
Inactive(anon): 244 kB
Active(file): 41344 kB
Inactive(file): 158320 kB
Unevictable: 0 kB
Mlocked: 0 kB
HighTotal: 155648 kB
HighFree: 304 kB
LowTotal: 747992 kB
LowFree: 454720 kB
SwapTotal: 0 kB
SwapFree: 0 kB
Dirty: 0 kB
Writeback: 0 kB
AnonPages: 143332 kB
Mapped: 61624 kB
Shmem: 276 kB
Slab: 12776 kB
SReclaimable: 5040 kB
SUnreclaim: 7736 kB
KernelStack: 5128 kB
PageTables: 9012 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 451820 kB
Committed_AS: 7976472 kB
VmallocTotal: 122880 kB
VmallocUsed: 49792 kB
VmallocChunk: 46020 kB
2. 查看進程信息,能夠實時顯示系統中各個進程的資源佔用狀況,類似於 Windows 的任務管理器
[ruby] view plain
#top -n 1 -d 1 -m 30 -t
User 13%, System 10%, IOW 0%, IRQ 0%
User 22 + Nice 9 + Sys 24 + Idle 170 + IOW 0 + IRQ 0 + SIRQ 1 = 226
PID TID PR CPU% S VSS RSS PCY UID Thread Proc
1762 1762 0 5% R 1264K 664K root top top
1323 1340 0 3% S 676928K 43096K bg u0_a55 MMHandlerThread com.tencent.mm
9 9 1 2% S 0K 0K root ksoftirqd/1
1323 1325 0 1% S 676928K 43096K bg u0_a55 GC com.tencent.mm
583 737 1 0% S 667232K 30480K fg u0_a44 droid.phasebeam com.android.phasebeam
298 326 1 0% S 728032K 45172K fg system ActivityManager system_server
298 321 0 0% S 728032K 45172K fg system SensorService system_server
960 960 0 0% S 661188K 33004K fg u0_a55 tencent.mm:push com.tencent.mm:push
843 843 1 0% S 660692K 38672K fg u0_a52 ndroid.systemui com.android.systemui
84 250 1 0% S 62188K 5688K fg system VSyncThread /system/bin/surfaceflinger
583 749 1 0% S 667232K 30480K fg u0_a44 droid.phasebeam com.android.phasebeam
960 984 0 0% S 661188K 33004K fg u0_a55 MMHandlerThread com.tencent.mm:push
22 22 0 0% S 0K 0K root kinteractiveup
84 84 1 0% S 62188K 5688K fg system surfaceflinger /system/bin/surfaceflinger
84 253 1 0% S 62188K 5688K fg system Binder_1 /system/bin/surfaceflinger
1143 1528 0 0% S 665552K 33132K bg u0_a23 AirPlayServer com.waxrain.airplayer
84 245 1 0% S 62188K 5688K fg system SurfaceFlinger /system/bin/surfaceflinger
53 53 0 0% S 0K 0K root rknand_buffer
1323 1323 0 0% S 676928K 43096K bg u0_a55 com.tencent.mm com.tencent.mm
298 637 0 0% S 728032K 45172K fg system Binder_4 system_server
298 647 0 0% S 728032K 45172K fg system Binder_5 system_server
1323 1330 0 0% S 676928K 43096K bg u0_a55 Compiler com.tencent.mm
84 864 0 0% S 62188K 5688K fg system Binder_3 /system/bin/surfaceflinger
298 304 1 0% S 728032K 45172K fg system Compiler system_server
3 3 0 0% S 0K 0K root ksoftirqd/0
1323 1335 0 0% S 676928K 43096K fg u0_a55 Binder_2 com.tencent.mm
51 51 0 0% S 0K 0K root binder
52 52 0 0% S 352K 184K root ueventd /sbin/ueventd
54 54 1 0% S 0K 0K root mtdblock0
55 55 1 0% S 0K 0K root mtdblock1
3. 虛擬內存的查看,目前還看不懂
[ruby] view plain
#cat /proc/vmstat
nr_free_pages 112977
nr_inactive_anon 61
nr_active_anon 36183
nr_inactive_file 39628
nr_active_file 10351
nr_unevictable 0
nr_mlock 0
nr_anon_pages 36180
nr_mapped 15427
nr_file_pages 50046
nr_dirty 0
nr_writeback 0
nr_slab_reclaimable 1455
nr_slab_unreclaimable 2005
nr_page_table_pages 2281
nr_kernel_stack 689
nr_unstable 0
nr_bounce 0
nr_vmscan_write 0
nr_writeback_temp 0
nr_isolated_anon 0
nr_isolated_file 0
nr_shmem 69
nr_dirtied 5665
nr_written 5413
nr_anon_transparent_hugepages 0
nr_dirty_threshold 26869
nr_dirty_background_threshold 6717
pgpgin 197593
pgpgout 26455
pswpin 0
pswpout 0
pgalloc_normal 389068
pgalloc_high 61026
pgalloc_movable 0
pgfree 563265
pgactivate 10977
pgdeactivate 0
pgfault 450191
pgmajfault 1011
pgrefill_normal 0
pgrefill_high 0
pgrefill_movable 0
pgsteal_normal 0
pgsteal_high 0
pgsteal_movable 0
pgscan_kswapd_normal 0
pgscan_kswapd_high 0
pgscan_kswapd_movable 0
pgscan_direct_normal 0
pgscan_direct_high 0
pgscan_direct_movable 0
pginodesteal 0
slabs_scanned 0
kswapd_steal 0
kswapd_inodesteal 0
kswapd_low_wmark_hit_quickly 0
kswapd_high_wmark_hit_quickly 0
kswapd_skip_congestion_wait 0
pageoutrun 1
allocstall 0
pgrotated 0
compact_blocks_moved 0
compact_pages_moved 0
compact_pagemigrate_failed 0
compact_stall 0
compact_fail 0
compact_success 0
unevictable_pgs_culled 0
unevictable_pgs_scanned 0
unevictable_pgs_rescued 0
unevictable_pgs_mlocked 0
unevictable_pgs_munlocked 0
unevictable_pgs_cleared 0
unevictable_pgs_stranded 0
unevictable_pgs_mlockfreed 0
4. 虛擬機信息,包括進程的,線程的跟蹤信息,這是用來跟蹤進程和線程具體點的好地方 。
導出到當前目錄 adb pull /data/anr/traces.txt .
二、分析log
1. 查找關鍵字
通過查找:"null" "error" " "E/","Fatal","NullPointerException","Build fingerprint:","exception","anr","DexOpt"等的錯誤信息,來定位問題
1)空指針問題
NullPointerException: 這個直接找到java代碼,首先分析為什麼會是空指針,如果邏輯上沒有問題,加上一個判斷就可以,也就是說如果為空的時候再次賦值或者直接返回
2).沒有捕獲異常問題
Exception:
能捕獲的話捕獲
『肆』 如何將Transparent HugePages關閉
[root@localhost ~]# grep Huge /proc/meminfo
AnonHugePages: 2048 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
如果輸出包含類似於"AnonHugepages: xxxx kB",並且AnonHugePages > 0kB,則表明內核使用的是Transparent HugePages(透明巨大頁面)
它的值我們可以從/proc/meminfo從找到它正在被內核使用的AnonHugePages當前值
# cat /sys/kernel/mm/transparent_hugepage/enabled
[always] never
若顯示的不是never則證明Transparent HugePages正在被使用。
下面的操作是如何disable Transparent HugePages操作,
[root@localhost ~]# vim /etc/grub.conf ///在kernel /最後添加transparent_hugepage=never,保存退出
title Oracle Linux Server (2.6.32-300.25.1.el6uek.x86_64)
root (hd0,0)
kernel /vmlinuz-2.6.32-300.25.1.el6uek.x86_64 ro root=LABEL=/ transparent_hugepage=never
initrd /initramfs-2.6.32-300.25.1.el6uek.x86_64.img
重啟下,
[root@localhost ~]# grep Huge /proc/meminfo
AnonHugePages: 0 kB
HugePages_Total: 2
HugePages_Free: 2
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
[root@localhost ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
always madvise [never]
『伍』 kswapd0 這個是什麼進程
採用hugepage,關閉11G的amm。自己看看網上很多帖子講如何實現的。
我們也遇到這個問題,TMD連接數達到36xx。採用後問題緩解,btw我們是10g。
11G採用hugepage有點麻煩,你可以在出現問題時看看:
# cat /proc/meminfo | grep -i page
AnonPages: 12529120 kB
PageTables: 751540 kB
AnonHugePages: 16384 kB
HugePages_Total: 6000
HugePages_Free: 2159
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
看看PageTables有多大。
如果不這樣,可以減少sga的大小看看情況是否好轉。
『陸』 Linux伺服器要怎麼查看內存
free命令顯示系統使用和空閑的內存情況,包括物理內存、交互區內存(swap)和內核緩沖區內存。
直接輸入free命令,顯示如下
泰海科技解答
『柒』 為什麼設置的anon_root不生效
通過第三方軟體獲得Root許可權,可以訪問和修改手機操作系統里幾乎所有的文件,但這樣操作有可能影響手機的穩定性,出現死機、重啟等人為性故障。另外獲取許可權後一般對存儲器和CPU等主板上主要部件引起不良。
Root屬於修改操作系統軟體,按照條例不屬於包修范圍。oppo為了提升顧客滿意度,對Root顧客提供免費升級固件服務,如果Root已影響到手機硬體需要更換主板,則需要收取主板費用。
若您的機器Root後需將機器恢復到原來的系統版本,請將機器送到oppo服務中心,由客戶工程師幫助檢查處理。自行將設備恢復出廠設置是無法取消Root許可權的。