LINUX.ORG.RU
ФорумTalks

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


0

3

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

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

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

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

★★★★★

Последнее исправление: cvs-255 (всего исправлений: 2)
Ответ на: комментарий от 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 ★★★★☆
()
Ответ на: на винде (3) от stevejobs

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

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

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

dib2 ★★★★★
()
Ответ на: комментарий от 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
()
Ответ на: комментарий от lost_shadow

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

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

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

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

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

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

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

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

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

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