-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfree
119 lines (109 loc) · 5.33 KB
/
free
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#!/bin/sh
# Display memory usage information on FreeBSD
# This function is a shell re-writting of the perl script:
## freebsd-memory -- List Total System Memory Usage
## Copyright (c) 2003-2004 Ralf S. Engelschall <[email protected]>
## http://www.cyberciti.biz/files/scripts/freebsd-memory.pl.txt
# round the physical memory size to the next power of two which is
# reasonable for memory cards. We do this by first determining the
# guessed memory card size under the assumption that usual computer
# hardware has an average of a maximally eight memory cards installed
# and those are usually of equal size.
# Strict script
set -e
set -u
mem_rounded () {
mem_size=$1
chip_size=1
chip_guess=`echo "$mem_size / 8 - 1" | bc`
while [ $chip_guess != 0 ]
do
chip_guess=`echo "$chip_guess / 2" | bc`
chip_size=`echo "$chip_size * 2" | bc`
done
mem_round=`echo "( $mem_size / $chip_size + 1 ) * $chip_size" | bc`
echo $mem_round
exit 0
}
free_memory () {
# determine the individual known information
# NOTICE: forget hw.usermem, it is just (hw.physmem - vm.stats.vm.v_wire_count).
# NOTICE: forget vm.stats.misc.zero_page_count, it is just the subset of
# vm.stats.vm.v_free_count which is already pre-zeroed.
mem_phys=`sysctl -n hw.physmem`
set +e
mem_hw=`mem_rounded $mem_phys`
set -e
sysctl_pagesize=`sysctl -n hw.pagesize`
mem_all=`echo "\`sysctl -n vm.stats.vm.v_page_count\` \
* $sysctl_pagesize" | bc`
mem_wire=`echo "\`sysctl -n vm.stats.vm.v_wire_count\` \
* $sysctl_pagesize" | bc`
mem_active=`echo "\`sysctl -n vm.stats.vm.v_active_count\` \
* $sysctl_pagesize" | bc`
mem_inactive=`echo "\`sysctl -n vm.stats.vm.v_inactive_count\` \
* $sysctl_pagesize" | bc`
mem_cache=`echo "\`sysctl -n vm.stats.vm.v_cache_count\` \
* $sysctl_pagesize" | bc`
mem_free=`echo "\`sysctl -n vm.stats.vm.v_free_count\` \
* $sysctl_pagesize" | bc`
# determine the individual unknown information
mem_gap_vm=`echo "$mem_all - ( $mem_wire + $mem_active + \
$mem_inactive + $mem_cache + $mem_free )" | bc`
mem_gap_sys=`echo "$mem_phys - $mem_all" | bc`
mem_gap_hw=`echo "$mem_hw - $mem_phys" | bc`
# determine logical summary information
mem_total=$mem_hw
mem_avail=`echo "$mem_inactive + $mem_cache + $mem_free" | bc`
mem_used=`echo "$mem_total - $mem_avail" | bc`
# print system results
printf "SYSTEM MEMORY INFORMATION:\n"
printf "mem_wire: %12d (%7dMB) [%3d%%] %s\n" $mem_wire \
`echo "$mem_wire / ( 1024 * 1024 )" | bc` `echo "$mem_wire \
* 100 / $mem_all" | bc` "Wired: disabled for paging out"
printf "mem_active: + %12d (%7dMB) [%3d%%] %s\n" $mem_active \
`echo "$mem_active / ( 1024 * 1024 )" | bc` `echo "$mem_active \
* 100 / $mem_all" | bc` "Active: recently referenced"
printf "mem_inactive:+ %12d (%7dMB) [%3d%%] %s\n" $mem_inactive \
`echo "$mem_inactive / ( 1024 * 1024 )" | bc` `echo "$mem_inactive \
* 100 / $mem_all" | bc` "Inactive: recently not referenced"
printf "mem_cache: + %12d (%7dMB) [%3d%%] %s\n" $mem_cache \
`echo "$mem_cache / ( 1024 * 1024 )" | bc` `echo "$mem_cache \
* 100 / $mem_all" | bc` "Cached: almost avail. for allocation"
printf "mem_free: + %12d (%7dMB) [%3d%%] %s\n" $mem_free \
`echo "$mem_free / ( 1024 * 1024 )" | bc` `echo "$mem_free \
* 100 / $mem_all" | bc` "Free: fully available for allocation"
printf "mem_gap_vm: + %12d (%7dMB) [%3d%%] %s\n" $mem_gap_vm \
`echo "$mem_gap_vm / ( 1024 * 1024 )" | bc` `echo "$mem_gap_vm \
* 100 / $mem_all" | bc` "Memory gap: UNKNOWN"
printf "______________ ____________ ___________ ______\n"
printf "mem_all: = %12d (%7dMB) [100%%] %s\n" $mem_all \
`echo "$mem_all / ( 1024 * 1024 )" | bc` "Total real memory managed"
printf "mem_gap_sys: + %12d (%7dMB) %s\n" $mem_gap_sys \
`echo "$mem_gap_sys / ( 1024 * 1024 )" | bc` "Memory gap: Kernel?!"
printf "______________ ____________ ___________\n"
printf "mem_phys: = %12d (%7dMB) %s\n" $mem_phys \
`echo "$mem_phys / ( 1024 * 1024 )" | bc` "Total real memory available"
printf "mem_gap_hw: + %12d (%7dMB) %s\n" $mem_gap_hw \
`echo "$mem_gap_hw / ( 1024 * 1024 )" | bc` "Memory gap: Segment Mappings?!"
printf "______________ ____________ ___________\n"
printf "mem_hw: = %12d (%7dMB) %s\n" $mem_hw \
`echo "$mem_hw / ( 1024 * 1024 )" | bc` "Total real memory installed"
# print logical results
printf "\n"
printf "SYSTEM MEMORY SUMMARY:\n"
printf "mem_used: %12d (%7dMB) [%3d%% %s\n" $mem_used \
`echo "$mem_used / ( 1024 * 1024 )" | bc` `echo "$mem_used \
* 100 / $mem_total" | bc` "Logically used memory"
printf "mem_avail: + %12d (%7dMB) [%3d%%] %s\n" $mem_avail \
`echo "$mem_avail / ( 1024 * 1024 )" | bc` `echo "$mem_avail \
* 100 / $mem_total" | bc` "Logically available memory"
printf "______________ ____________ __________ _______\n"
printf "mem_total: = %12d (%7dMB) [100%%] %s\n" $mem_total \
`echo "$mem_total / ( 1024 * 1024 )" | bc` "Logically total memory"
exit 0
}
###################
## Main function ##
###################
free_memory