Ключевые слова:memory, info, solaris, (найти похожие документы)
Date: Tue, 29 Jan 2002 10:20:20 +0300
From: Eugene Exarevsky <[email protected]>
Newsgroups: fido7.ru.unix.prog
Subject: [Solaris] Определение объема ОЗУ в программе
> >> Требуется программно собрать информацию следующего плана: объемы
> >> физической и виртуальной памяти, степень их занятости, сколько
> >> физической памяти приходится на файловые кеши, сколько физической памяти
> >> приходится на загруженные shared libraries.
Я вот так делал в общих чертах, идею из top стащил :
maxmem = sysconf(_SC_PHYS_PAGES);
page_size = sysconf(_SC_PAGE_SIZE);
l_maxmem = maxmem;
l_page_size = page_size;
...
if(l_kd == NULL)
{
struct nlist nlst[1] = { { "freemem" } };
l_kd = kvm_open (NULL, NULL, NULL, O_RDONLY, NULL);
if(l_kd == NULL)
{
ndmlogLog(LOG_SYS_ERROR,
"kvm_open()");
ret = ERROR;
}
else if (kvm_nlist (l_kd,
nlst) < 0)
{
ndmlogLog(LOG_SYS_ERROR,
"kvm_nlist()");
ret = ERROR;
}
else
{
l_freemem_offset = nlst[0].n_value;
}
}
if(l_kd)
{
(void)kvm_read(l_kd,
l_freemem_offset,
(void *)&freemem,
sizeof(freemem));
}
*kb_used = (l_maxmem - freemem) * l_page_size / 1024;
Т..е. читаем /dev/kmem, если мне не изменяет склероз.
А по хорошему, наверно, man kstat.
--
Всего, Е.Эксаревский