Как программно проверить свободную системную память на Mac, как это делает Activity Monitor? - PullRequest
12 голосов
/ 23 мая 2011

В Mac OS X я вижу, сколько памяти свободно в Activity Monitor.Как я могу программно сделать это?

Ответы [ 3 ]

26 голосов
/ 23 мая 2011

Это должно сделать это. Гугл вокруг для точного значения полей в структурах, но это должно быть довольно понятно из этого кода.

#import <sys/sysctl.h>
#import <mach/host_info.h>
#import <mach/mach_host.h>
#import <mach/task_info.h>
#import <mach/task.h>
int mib[6]; 
mib[0] = CTL_HW;
mib[1] = HW_PAGESIZE;

int pagesize;
size_t length;
length = sizeof (pagesize);
if (sysctl (mib, 2, &pagesize, &length, NULL, 0) < 0)
{
    fprintf (stderr, "getting page size");
}

mach_msg_type_number_t count = HOST_VM_INFO_COUNT;

vm_statistics_data_t vmstat;
if (host_statistics (mach_host_self (), HOST_VM_INFO, (host_info_t) &vmstat, &count) != KERN_SUCCESS)
{
    fprintf (stderr, "Failed to get VM statistics.");
}

double total = vmstat.wire_count + vmstat.active_count + vmstat.inactive_count + vmstat.free_count;
double wired = vmstat.wire_count / total;
double active = vmstat.active_count / total;
double inactive = vmstat.inactive_count / total;
double free = vmstat.free_count / total;

task_basic_info_64_data_t info;
unsigned size = sizeof (info);
task_info (mach_task_self (), TASK_BASIC_INFO_64, (task_info_t) &info, &size);

double unit = 1024 * 1024;
memLabel.text = [NSString stringWithFormat: @"% 3.1f MB\n% 3.1f MB\n% 3.1f MB", vmstat.free_count * pagesize / unit, (vmstat.free_count + vmstat.inactive_count) * pagesize / unit, info.resident_size / unit];
3 голосов
/ 23 мая 2011

На самом деле, это только наполовину правда.

free - это не стандартная UNIX, а команда только для Linux.Вы не найдете его ни в BSD, ни в OS X.

В этом отношении, лучший способ получить информацию о памяти - через sysctl.

Т.е. выполнить sysctl -a | grep -Ei "(hw|vm)\..*mem"

и вы поймете идею.

Чтобы использовать это программно в C, обратитесь к man sysctlbyname .

Кроме того, я не вижу, как Системный монитор GNOME помогает в OS X.

df, тем не менее, является хорошим советом.

Если вы просто планируете использовать оболочку для сбора этих данных и выберите top, прочитайте человек сверху .Вы можете вызвать top с помощью -l 1, чтобы получить только один образец, и ограничить таблицу процессов, скажем, 20 процессами с помощью -n 20. Имейте в виду, что вы не получите значения ЦП для процессов, использующих только образец, причина описанана странице man.

Простой пример получения некоторой информации о памяти из верхней части (только полные строки):

top -l1 -n 20 | grep -Ei "mem|vm"

Надеюсь, это поможет.

0 голосов
/ 23 мая 2011

Обычные команды для этого в UNIX:

  • df -h для использования на жестком диске
  • бесплатно для оперативной памяти и обмен использование

Затем вы используете / цепочку одного или нескольких из них, чтобы извлечь одну из приведенных сведений: ack, sed, grep, head, cut, ...

Примечание. Если вы не планируете «программно» проверять память, я бы посоветовал вам использовать top , чтобы узнать, какие процессы используют ваш ЦП и ОЗУ. Системный монитор Gnome является одним из его эквивалентов в графическом интерфейсе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...