Внезапно оказалось, что во FreeBSD нет способа быстро и наглядно посмотреть размер физической, свободной и занятой памяти. Вроде команды ‘free’ в линуксе. Интернет полон вопросами на этот счет и в ответ предлагается либо грепать дмесг:
# dmesg | grep memory real memory = 2147483648 (2048 MB) avail memory = 2045009920 (1950 MB) real memory = 2147483648 (2048 MB) avail memory = 2045009920 (1950 MB)
Либо ставить из портов ‘freecolor’:
# uname -omr FreeBSD 9.0-RELEASE amd64 # cd /usr/ports/sysutils/freecolor/ freebsd# make install clean ===> freecolor-0.8.8 is marked as broken: Does not function correctly on !i386. *** Error code 1 Stop in /usr/ports/sysutils/freecolor.
Пичалька. Либо скачать и использовать вот этот перловый скрипт.
Ад и ненависть наполняет автора оригинального поста найденного мной тут, так как использовать пёрл для такой простой задачи — это нарушать KISS-принцип, ломать бритву Оккама лишней сущностью, а также просто фэйл. Плюс скрипт не обрабатывает ситуацию запуска из jail-а, что в наше время адской виртуализации всего — неприемлемо. Всяческие ‘top’ и ‘vmstat’ не велят использовать пауки, так как тоже лишняя сущность и в minimal install их нет.
Вобщем автор, портировал этот скрипт на язык, присутствующий в любой unix-системе (/bin/sh) и добавил обработку jail-a. Сохраните код ниже в какой-нибудь ‘/usr/bin/free’, сделайте ему ‘chmod a+x’ и наслаждайтесь.
#!/bin/sh mem_phys=`sysctl -n hw.physmem` mem_pgs=`sysctl -n hw.pagesize` sys_jail=`sysctl -n security.jail.jailed` # guess hardware memory size chip_size=1 chip_guess=`expr $mem_phys / 8 - 1` while [ $chip_guess -ne 0 ]; do chip_guess=`expr $chip_guess / 2` chip_size=`expr $chip_size \* 2` done mem_hw=`expr \( $mem_phys - 1 \) / $chip_size` mem_hw=`expr $mem_hw \* $chip_size + $chip_size` # determine the individual known information mem_all=`sysctl -n vm.stats.vm.v_page_count` mem_all=`expr $mem_all \* $mem_pgs` mem_wire=`sysctl -n vm.stats.vm.v_wire_count` mem_wire=`expr $mem_wire \* $mem_pgs` mem_active=`sysctl -n vm.stats.vm.v_active_count` mem_active=`expr $mem_active \* $mem_pgs` mem_inactive=`sysctl -n vm.stats.vm.v_inactive_count` mem_inactive=`expr $mem_inactive \* $mem_pgs` mem_cache=`sysctl -n vm.stats.vm.v_cache_count` mem_cache=`expr $mem_cache \* $mem_pgs` mem_free=`sysctl -n vm.stats.vm.v_free_count` mem_free=`expr $mem_free \* $mem_pgs` # determine the individual unknown information mem_gap_vm=`expr -- $mem_all - \( $mem_wire + $mem_active + $mem_inactive + $mem_cache + $mem_free \)` mem_gap_sys=`expr -- $mem_phys - $mem_all` mem_gap_hw=`expr -- $mem_hw - $mem_phys` # determine logical summary information mem_total=$mem_hw mem_avail=`expr -- $mem_inactive + $mem_cache + $mem_free` mem_used=`expr -- $mem_total - $mem_avail` # print system results printf "System memory information (page size is %d bytes)\n" $mem_pgs if [ $sys_jail -eq 1 ]; then printf "WE ARE IN THE JAIL\n" printf "mem_wire: %12d (%7dMB) %s\n" $mem_wire `expr -- $mem_wire / 1048576` 'Wired: disabled for paging out' printf "mem_active: %12d (%7dMB) %s\n" $mem_active `expr -- $mem_active / 1048576` 'Active: recently referenced' printf "mem_inactive: %12d (%7dMB) %s\n" $mem_inactive `expr -- $mem_inactive / 1048576` 'Inactive: recently not referenced' printf "mem_cache: %12d (%7dMB) %s\n" $mem_cache `expr -- $mem_cache / 1048576` 'Cached: almost avail. for allocation' printf "mem_free: %12d (%7dMB) %s\n" $mem_free `expr -- $mem_free / 1048576` 'Free: fully available for allocation' printf -- "-------------- ------------ -----------\n" printf "mem_phys: %12d (%7dMB) %s\n" $mem_phys `expr -- $mem_phys / 1048576` 'Total real memory available' else printf "mem_wire: %12d (%7dMB) [%3d%%] %s\n" $mem_wire `expr -- $mem_wire / 1048576` `expr -- $mem_wire \* 100 / $mem_all` 'Wired: disabled for paging out' printf "mem_active: + %12d (%7dMB) [%3d%%] %s\n" $mem_active `expr -- $mem_active / 1048576` `expr -- $mem_active \* 100 / $mem_all` 'Active: recently referenced' printf "mem_inactive:+ %12d (%7dMB) [%3d%%] %s\n" $mem_inactive `expr -- $mem_inactive / 1048576` `expr -- $mem_inactive \* 100 / $mem_all` 'Inactive: recently not referenced' printf "mem_cache: + %12d (%7dMB) [%3d%%] %s\n" $mem_cache `expr -- $mem_cache / 1048576` `expr -- $mem_cache \* 100 / $mem_all` 'Cached: almost avail. for allocation' printf "mem_free: + %12d (%7dMB) [%3d%%] %s\n" $mem_free `expr -- $mem_free / 1048576` `expr -- $mem_free \* 100 / $mem_all` 'Free: fully available for allocation' printf "mem_gap_vm: + %12d (%7dMB) [%3d%%] %s\n" $mem_gap_vm `expr -- $mem_gap_vm / 1048576` `expr -- $mem_gap_vm \* 100 / $mem_all` 'Memory gap: UNKNOWN' printf -- "-------------- ------------ ----------- ------\n" printf "mem_all: = %12d (%7dMB) [100%%] %s\n" $mem_all `expr -- $mem_all / 1048576` 'Total real memory managed' printf "mem_gap_sys: + %12d (%7dMB) %s\n" $mem_gap_sys `expr -- $mem_gap_sys / 1048576` 'Memory gap: Kernel?!' printf -- "-------------- ------------ -----------\n" printf "mem_phys: = %12d (%7dMB) %s\n" $mem_phys `expr -- $mem_phys / 1048576` 'Total real memory available' printf "mem_gap_hw: + %12d (%7dMB) %s\n" $mem_gap_hw `expr -- $mem_gap_hw / 1048576` 'Memory gap: Segment Mappings?!' printf -- "-------------- ------------ -----------\n" printf "mem_hw: = %12d (%7dMB) %s\n" $mem_hw `expr -- $mem_hw / 1048576` 'Total real memory installed' fi # print logical results if [ $sys_jail -ne 1 ]; then printf "\nSystem memory summary\n" printf "mem_used: %12d (%7dMB) [%3d%%] %s\n" $mem_used `expr -- $mem_used / 1048576` `expr -- $mem_used \* 100 / $mem_total` 'Logically used memory' printf "mem_avail: + %12d (%7dMB) [%3d%%] %s\n" $mem_avail `expr -- $mem_avail / 1048576` `expr -- $mem_avail \* 100 / $mem_total` 'Logically available memory' printf -- "-------------- ------------ ----------- ------\n" printf "mem_total: = %12d (%7dMB) [100%%] %s\n" $mem_total `expr -- $mem_total / 1048576` 'Logically total memory' fi
Пример вывода:
System memory information (page size is 4096 bytes) mem_wire: 1384239104 ( 1320MB) [ 67%] Wired: disabled for paging out mem_active: + 19644416 ( 18MB) [ 0%] Active: recently referenced mem_inactive:+ 4112384 ( 3MB) [ 0%] Inactive: recently not referenced mem_cache: + 36864 ( 0MB) [ 0%] Cached: almost avail. for allocation mem_free: + 654012416 ( 623MB) [ 31%] Free: fully available for allocation mem_gap_vm: + 512000 ( 0MB) [ 0%] Memory gap: UNKNOWN -------------- ------------ ----------- ------ mem_all: = 2062557184 ( 1967MB) [100%] Total real memory managed mem_gap_sys: + 63373312 ( 60MB) Memory gap: Kernel?! -------------- ------------ ----------- mem_phys: = 2125930496 ( 2027MB) Total real memory available mem_gap_hw: + 21553152 ( 20MB) Memory gap: Segment Mappings?! -------------- ------------ ----------- mem_hw: = 2147483648 ( 2048MB) Total real memory installed System memory summary mem_used: 1489321984 ( 1420MB) [ 69%] Logically used memory mem_avail: + 658161664 ( 627MB) [ 30%] Logically available memory -------------- ------------ ----------- ------ mem_total: = 2147483648 ( 2048MB) [100%] Logically total memory