Juniper SRX550 記憶體使用量剖析報告
緣起:
因公司的Juniper SRX550自正式上線後,其記憶體使用量持續維持在74%不變,且新增規則後接無任何變化,因此深入研究Juniper SRX系列作業系統(Junos OS)運作原理。
剖析步驟:
1.
檢視原廠說明文件或KB
2.
確認韌體版本及底層核心系統
3.
檢視Junos OS記憶體使用狀況
4.
檢視底層記憶體使用狀況
5.
總結
LAB設備:
Juniper SRX100
- 檢視原廠說明文件或KB
經詢問SI工程師後得知Juniper Knowledge
Base(KB)已經有針對Junos OS記憶體使用情況進行說明。
KB說明:
The command displays the control plane and
data plane memory, which represents the RAM that is shared between RE and PFE;
of which a certain percentage is pre-allocated for utilization.
The allocation of memory is as per the system design and does not hinder the capacity of the device to route, when it is in production.
The allocation of memory is as per the system design and does not hinder the capacity of the device to route, when it is in production.
由此可知Junos OS在分配記憶體資源時,會預先配置記憶體。
- 確認韌體版本及底層核心系統
以ssh登入SRX後,執行以下指令可查詢韌體版本
範例1:
zongyan@Cloud-IPS-FW-2> show version
Hostname:
Cloud-IPS-FW-2
Model:
srx100h2
JUNOS
Software Release [12.1X46-D35.1]
查詢底層作業系統:
透過JunosOS的系統文件可查到JunosOS其實是安裝在FreeBSD上的一個子系統。
官方系統文件:
- 檢視Junos OS記憶體使用狀況
在Junos OS檢視記憶體使用狀況可透過2個不同的指令,分別查詢Routing Engine及system-wide memory。
指令1:
show chassis routing-engine
說明:
Display
the status of the Routing Engine.
指令2:
show system
memory
說明:
Display
system-wide memory distribution and usage including the Junos OS kernel,
software processes, and memory disks. Use the show
system memory command for troubleshooting with Juniper Networks Customer
Support.
參考來源:
差異:
Routing
Engine狀態中的記憶體是用來儲存路由表等資訊,而system-wide memory則是整個Junos OS的記憶體使用情況。
關於Routing Engine細部說明可參閱原廠文件:
https://www.juniper.net/documentation/en_US/junos12.1/topics/concept/routing-engine-redundacny-overview.html
範例2:
zongyan@Cloud-IPS-FW-2>
show chassis routing-engine
Routing
Engine status:
Temperature 48 degrees C / 118 degrees F
Total memory 2048 MB Max 963 MB used ( 47 percent)
Control plane memory 1088 MB Max 424 MB used ( 39 percent)
Data plane memory 960 MB Max 547 MB used ( 57 percent)
CPU utilization:
User 3 percent
Background 0 percent
Kernel 17 percent
Interrupt 0 percent
Idle 80 percent
Model RE-SRX100H2
Serial ID BZ3215AF1460
Start time 2015-11-19 07:22:48 GMT+8
Uptime 15 days, 1 minute, 28
seconds
Last reboot reason 0x1:power cycle/failure
Load averages: 1 minute 5 minute
15 minute
0.01 0.08 0.08
範例3:
zongyan@Cloud-IPS-FW-2>
show system memory
System
memory usage distribution:
Total memory: 2097152 Kbytes (100%)
Reserved memory: 1044220 Kbytes ( 49%)
Wired memory: 1048992 Kbytes ( 50%)
Active memory: 179588 Kbytes ( 8%)
Inactive memory: 109156 Kbytes ( 5%)
Cache memory: 171240 Kbytes ( 8%)
Free memory: 510520 Kbytes ( 24%)
Memory
disk resident memory: 29200 Kbytes
VM-Kbytes( % ) Resident( % )
Map-name
625784(59.68) 119904(00.00) kernel
Pid VM-Kbytes(
% ) Resident( % )
Process-name
26298
5776(01.10) 1300(00.00)
/sbin/pmap
26256
138628(26.44) 6544(00.00) mgd:
(mgd) (zongyan)/dev/ttyp2
26255
50204(02.39) 16848(00.00) -cli
26251
9828(00.46) 3076(00.00) sshd:
zongyan@ttyp2
26214
138628(26.44) 6068(00.00) mgd:
(mgd) (zongyan)/dev/ttyp1
26213
50204(02.39) 16828(00.00) –cli
由範例2及範例3可看出 show chassis
routing-engine 僅顯示routing-engine的狀態,而show system memory 更進一步的列出所有的程序佔用的記憶體大小。
- 檢視底層記憶體使用狀況
要檢視底層系統的記憶體使用狀況除了透過show system memory 指令之外,還可以透過底層系統的記憶體使用狀況來做分析。
在Junos OS的設備要進入底層FreeBSD有2種方式:
1. 直接在op mode輸入指令:start shell
2. 以root權限登入JunosOS
查詢底層記憶體使用情況:
進入FreeBSD後,執行指令top後,系統會動態顯示目前設備的CPU、Memory、各個程序的使用狀態。
範例4:
root@Cloud-IPS-FW-2% top
last pid: 26383;
load averages: 0.47, 0.19,
0.15 up 15+01:38:37 16:58:48
72 processes: 3
running, 68 sleeping, 1 zombie
CPU states: 53.0% user, 0.0% nice,
9.4% system, 0.0% interrupt,
37.6% idle
Mem: 170M Active, 107M Inact, 1024M Wired, 167M Cache,
112M Buf, 504M Free
Swap:
PID
USERNAME THR PRI NICE SIZE RES STATE
C TIME WCPU COMMAND
1571 root 5
76 0 996M 58840K select 0 424.7H 109.72%
flowd_octeon_hm
1522 root 1
76 0 12460K 5664K select 0 96:58
0.00% license-check
1484 root 1
76 0 28080K 10352K select
0 61:48
0.00% mib2d
1486 root 1
76 0 20304K 8688K select 0 54:50
0.00% l2ald
1507 root 1
76 0 15972K 3624K select 0 38:39
0.00% shm-rtsdbd
1518 root 1
76 0 17564K 8000K select 0 30:43
0.00% utmd
1480 root 1 76 0
12652K 5064K select 0 28:58
0.00% alarmd
1488 root 2
76 0 25508K 8972K select 0 24:41
0.00% pfed
由範例可知底層作業系統的記憶體使用狀況,從查詢到的資料顯示,總共2GB的記憶體只剩下504MB。這是因為FreeBSD會將記憶體變為Virtual Memory(VM)再進行使用,這樣的好處是能夠將空閒的記憶體當作系統快取增加系統效能。
查詢Virtual Memory使用狀況:
VM使用狀況可使用 vmstat 指令查詢。
範例5:
root@Cloud-IPS-FW-2% vmstat
r b w avm fre flt re
pi po fr sr da0 pa0 in sy cs us
sy id
2 0 0 869564 690696
5 0 0
0 4 0
0 0 2442 1162
1173 52 7 41
avm 欄位代表的是使用中的VM大小,fre欄位則是未使用的VM大小。
- 總結
在Juniper官方KB已經說明Junos OS系統在開機時就會預先配置記憶體大小,將記憶體做有效的運用,若系統需要更多記憶體時,會再分配記憶體使用。
為了驗證Juniper官方KB說法,進而分析底層作業系統架構及記憶體使用狀況,由於FreeBSD系統的記憶體使用方式是將記憶體變為Virtual Memory再進行使用,以增進系統運作效能,若有其他的需求時FreeBSD會再調配記憶體大小。
從以上分析結果可知,將記憶體使用情況作為Junos OS負載評量指標並不妥當。