Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 02 Jun 2018 18:16:10 -0400
From:      Brennan Vincent <brennan@umanwizard.com>
To:        freebsd-questions@freebsd.org
Subject:   Is it normal that a user can take down the whole system by using too much memory?
Message-ID:  <1527977770.2651378.1394286400.0806CC5C@webmail.messagingengine.com>

index | next in thread | raw e-mail

[-- Attachment #1 --]
The attached program `eatmem.c` is a simple example to waste N gigs of memory as quickly as possible.

When I run something like `eatmem 32` (on a system with less than 32GB of RAM), about half the time everything works fine: the system quickly runs out of RAM and swap, the kernel kills `eatmem`, and everything recovers. However, the other half of the time, the system becomes completely unusable: my ssh session is killed, important processes like `init` and `getty` are killed, and it's impossible to even log into the system (the local terminal is unresponsive, and I can't ssh in because sshd is killed immediately whenever it tries to run). The only way to recover is by rebooting.

Is this expected behavior?

My system details are as follows:
FreeBSD 12 CURRENT x86_64 guest on VMWare Fusion.
ram: 8 GB
swap: 1 GB
Host: macbook pro running macOS.

[-- Attachment #2 --]
#include <stdio.h>
#include <stdlib.h>

#define PAGE_SIZE 4096
int main(int argc, char **argv)
{
	size_t gb = atoi(argv[1]);
	size_t sz = gb * 1024 * 1024 * 1024;
	volatile char *mem = malloc(sz);
	if (!mem) {
		fprintf(stderr, "Couldn't malloc!\n");
		return -1;
	}
	while (1)
		for (size_t i = 0; i < sz; i += PAGE_SIZE)
			mem[i] = 0;
}
help

Want to link to this message? Use this
URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1527977770.2651378.1394286400.0806CC5C>