LINUX.ORG.RU
ФорумTalks

Линукс ест память


0

3

Несмотря на упорные разговоры о том, что это всего лишь кэширование и не страшно, простейший опыт показывает, что не все так радужно

Был взят компьютер с 64 битным debian testing/sid и 2,5 гигабайтами памяти. Запущен гном-2.30 без всяких наворотов. Для тестирования написал программу, которая последовательно отъедает все больше памяти. Своп отключил. Из 2,5 гигов она смогла съесть 2160 МБ. Остается 356 мб, которые система не отдает.

Хотя еще год назад я сидел на 512 мб памяти, и голый десктоп не жрал бОльшую часть памяти.

//PS: если у кого есть windows на компьютере, поделитесь данными

★★★★★

Последнее исправление: cvs-255 (всего исправлений: 2)

как выключить сжатие страниц? гугл не в помощь, у кого исходники ядра под рукой - погрепайте Documentation пожалуйста!

dib2 ★★★★★
()

Вы на самом деле думаете, что malloc() выделяет настоящую память?

$ sudo sysctl vm.overcommit_memory=0
vm.overcommit_memory = 0
$ ./test
malloc: Cannot allocate memory
$ sudo sysctl vm.overcommit_memory=1
vm.overcommit_memory = 1
$ ./test
Okay
$ cat test.c
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

int main (int argc, char *argv[]) {
	
	int *p = malloc(1024 * 1024 * 2000);

	if (p == NULL) {
		perror("malloc");
	}
	else {
		printf("Okay\n");
	}
}

$ free -m
             total       used       free     shared    buffers     cached
Mem:           435        431          4          0          7        134
-/+ buffers/cache:        289        146
Swap:          766          0        766


AptGet ★★★
()
Ответ на: комментарий от cvs-255

Без него killer не дремлет.

Requested 1120 MB...OK
Requested 1121 MB...OK
Requested 1122 MB...OK
Убито
andrey@power-debian:~/tmp$ free -m
             total       used       free     shared    buffers     cached
Mem:          1513        420       1092          0          1         41
-/+ buffers/cache:        377       1135
Swap:            0          0          0

goose
()
Ответ на: комментарий от cvs-255

Попробуй после 8600 прочитать байты из начала.

Немного модифицировал, вставил чтение.

Теперь у нас точно проверялка памяти! :)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void writeInt(unsigned char* byteArray, unsigned long longInt, unsigned long int offset) {
	byteArray[offset+0] = (longInt >> 24) & 0xFF;
	byteArray[offset+1] = (longInt >> 16) & 0xFF;
	byteArray[offset+2] = (longInt >> 8) & 0XFF;
	byteArray[offset+3] = (longInt & 0XFF);
}

unsigned long int readInt(unsigned char* byteArray, unsigned long int offset) {
	unsigned long int result;

	result  = ((unsigned long int) byteArray[0+offset]) << 24;
	result |= ((unsigned long int) byteArray[1+offset]) << 16;
	result |= ((unsigned long int) byteArray[2+offset]) << 8;
	result |= ((unsigned long int) byteArray[3+offset]);

	return result;
}

int main(void)
{
	unsigned char *mem = NULL;
	unsigned long int size, i, x;
	unsigned int bsize = 1048576;
	int success = 1;

	size = 0;
	do
	{
		printf("Requested %i MB...", size);
		mem = malloc(size*bsize);
		if (mem)
		{
			for (i=0; i < (size*bsize)/4; i=i+4) {
				writeInt(mem,i,i*4);			
				//printf("write OK, ");
				
				x = readInt(mem,i*4);
				if (x==i) {
					//printf("read OK\n");
				} else {
					success=0;
					printf("read FAILED for index %i, value %i\n",i,x);
				}
			}
			if (1==success) {
				printf(" OK\n");
			} else {
				success=1;
				printf(" FAILED\n");
			}
			free(mem);

		}
		else
		{
			printf("Failed!\n");
		}
		size+=50;
	} while (NULL!=mem);
}
stevejobs ★★★★☆
()
Ответ на: комментарий от stevejobs

на винде (3)

в варианте с проверкой записанного - выделяет больше 10 Гб (при физическом лимите в 8 и отключенном свопе на всех дисках)

На этот раз уже ровно, без рывков.

причем, добралось этого значение не за 40 минут (как у кого-то выше по треду), а за считаные минуты.

stevejobs ★★★★☆
()

Для тестирования написал программу, которая последовательно отъедает все больше памяти.

Ну да. Программа ест память, линукс ей эту память даёт. Что с этим не так? Если вы считаете, что ОС должна не исполнять указания софта — с этим вам к винде.

d1337r
()

Запущен гном-2.30 без всяких наворотов.

Для гнома без наворотов сожрать 356мб памяти - это нормальное поведение. При чем тут линукс?

provaton ★★★★★
()

> Для тестирования написал программу, которая последовательно отъедает все больше памяти.
Ты клон файрфокса написал?

CYB3R ★★★★★
()
Ответ на: комментарий от provaton

Для гнома без наворотов сожрать 356мб памяти - это нормальное поведение. При чем тут линукс?

У меня тоньше было, 120 мб... Ваш гном слишком толстый.

FiXer ★★☆☆☆
()
Ответ на: комментарий от FiXer

А вот недавно федору поставил на посмотреть, 2 гига рамы, сожрано было 600 мб. Кстати, у меня yum ВНЭЗАПНО отжирал 370 мб вполне реальной памяти во время установки обновлений, а selinuxшототам пару раз +300 делал о_О

FiXer ★★☆☆☆
()
Ответ на: комментарий от FiXer

> Ваш гном слишком толстый.

Мой иксмонад ест 7 мегабайт, а гнома у меня нет вообще.

provaton ★★★★★
()

Странная у вас программа:

Requested 5000 MB...OK
Requested 5050 MB...OK
Requested 5100 MB...OK
^C
$ free -m
             total       used       free     shared    buffers     cached
Mem:          3965        917       3047          0          0        491
-/+ buffers/cache:        426       3538
Swap:         4095        275       3820
adepto
()
Ответ на: на винде (3) от stevejobs

>причем, добралось этого значение не за 40 минут (как у кого-то выше по треду), а за считаные минуты.

у меня есть подозрение что так много времени тратилось потому что

dib@diblaptop:~$ cat /boot/config-3.0.0-12-generic | grep COMPACT
CONFIG_COMPACTION=y

dib2 ★★★★★
()
Ответ на: комментарий от adepto

кстати, видел при этом график потребления памяти? там пилу показывает, т.е. набирает-набирает, потом сбрасывает...

кастую человека который растолкует треду все эти тонкости.

dib2 ★★★★★
()

Радуйся, чё.

У меня в такой ситуации, похоже, освобождает кэш. Система почти виснет, а оом киллер сразу не срабатывает.

1.5 гб, свопа нет. Приходится юзать ulimit.

alfix
()
Ответ на: комментарий от stevejobs

Проверил последней проверялкой памяти от stevejobs. Исправил одну ошибку - в проге предполагается, что размер числа в памяти 32х-битный, а у меня оно не влазит.

Алгоритм имеет квадратичную сложность, потому, чтобы не ждать очень долго, увеличил размер блока до 1 гигабайта, а начал цикл с 70 гигабайт:

Вот последнее зафиксированное free -m:

             total       used       free
Mem:         16073      16023         49
-/+ buffers/cache:      16016         56
Swap:        61035      58080       2954

Вот вывод програмы:

Requested 70000 MB... OK
Requested 71000 MB... OK
Requested 72000 MB... OK
Requested 73000 MB... OK
Requested 74000 MB... OK
Requested 75000 MB...Failed!

Любопытно, что free -m работал раз в 0.5 секунд. Почему осталось свободными 3 гигабайта - мне не понятно.

lost_shadow
()
Ответ на: комментарий от lost_shadow

После этого free -m показал:

$ free -m
             total       used       free
Mem:         16073        125      15947
-/+ buffers/cache:        114      15958
Swap:        61035         28      61006

Так что вроде бы ничего не съелось (при аптайме 87 дней).

lost_shadow
()

>Линукс ест память

Вот это новость!

splinter ★★★★★
()
Ответ на: комментарий от lost_shadow

>Почему осталось свободными 3 гигабайта - мне не понятно.

3% памяти резервируются для root.

AptGet ★★★
()
Ответ на: комментарий от goose

Значит нужно регулярно обращаться к выделенной памяти

cvs-255 ★★★★★
() автор топика
Ответ на: комментарий от cvs-255

Резервный сервер для парка виртуальных машин, по плану будет подхватывать виртуалки при отказе основного. Физической памяти там всего 16 гигабайт, остальное - своп. Единственная доступная мне машина, на которой можно было без вреда попробовать эту программу.

lost_shadow
()
Ответ на: комментарий от lost_shadow

Дата регистрации: 19.12.2006 11:48:14

Офигеть) А раньше я тебя здесь и не замечал совсем...

stevejobs ★★★★☆
()
Ответ на: комментарий от lost_shadow

Как думаешь, почему у меня перепрыгивает за пределы памяти в винде? Тоже оверкоммит?

stevejobs ★★★★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.