This is the mail archive of the
cygwin
mailing list for the Cygwin project.
How to ulimit virtual memory on Cygwin-64 processes?
- From: Dan Bonachea <dobonachea at lbl dot gov>
- To: cygwin at cygwin dot com
- Date: Thu, 30 Mar 2017 15:51:34 -0400
- Subject: How to ulimit virtual memory on Cygwin-64 processes?
- Authentication-results: sourceware.org; auth=none
Is there a way to get ulimit-style virtual memory limit enforcement on
64-bit Cygwin processes?
I'm a programmer and occasionally I have a bug that sends a process
into a memory-grabbing tail-spin. On 32-bit Cygwin, such a runaway
process gets stopped cold at 4GB VM (and usually crashes), but 4GB is
well short of the physical memory on my 64-bit windows system so this
doesn't affect my system stability.
However a similar runaway process on 64-bit Cygwin is easily capable
of grabbing nearly all of the memory on my system, which can lead to
Very Bad Things - ie unrelated user processes start crashing, desktop
window manager disappears, and the system slows to a crawl or freezes
entirely - making it difficult or impossible to kill the run-away.
Several times now I've had to hard power-cycle to recover from such a
Cygwin-64 runaway memory-grabbing process, and have lost some data as
a result.
You can replicate this behavior with a very simple program: (however I
DON'T recommend running this)
#include <stdlib.h>
#include <stdio.h>
int main() {
printf("WARNING: I'm stealing all your memory, hit control-c to
cancel!!!\n");fflush(0);
while(1) malloc(1e6);
return 0;
}
The traditional POSIX solution to this problem is setrlimit() aka bash
ulimit, but that does not appear to be implemented in Cygwin 2.7.0:
$ ulimit -a
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
file size (blocks, -f) unlimited
open files (-n) 256
pipe size (512 bytes, -p) 8
stack size (kbytes, -s) 2036
cpu time (seconds, -t) unlimited
max user processes (-u) 256
virtual memory (kbytes, -v) unlimited
$ ulimit -v 1048576
bash: ulimit: virtual memory: cannot modify limit: Invalid argument
Is there any hidden setting or other way to enforce a reasonable VM /
heap memory / page commit limit on 64-bit Cygwin processes (or even
all windows processes) via some other mechanism? I'm running Windows 7
Pro.
I've searched the Cygwin mailing list archives, user guide, FAQ, and
Google and not found a suitable answer. I've tried the peflags utility
mentioned in the Cygwin user guide, but that doesn't seem capable of
doing what I need, even for a single executable (although ideally I
want to enforce a system-wide limit).
Thanks for your consideration.
-Dan Bonachea
--
Problem reports: http://cygwin.com/problems.html
FAQ: http://cygwin.com/faq/
Documentation: http://cygwin.com/docs.html
Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple