Date: Fri, 10 Mar 2000 02:47:19 GMT From: lists@efinley.com (Elliot Finley) To: freebsd-questions@FreeBSD.ORG Subject: Code that crashes 3.4-Stable Message-ID: <38c85e65.27328632@mail.afnetinc.com>
next in thread | raw e-mail | index | archive | help
I'm in the process of stress testing a system for a program that I'm writing. This program will be starting lots of processes, so I wrote a short bit a code to test this out. The machine is 3.4-stable as of a couple of days ago, PII-350 384M RAM, and 500M swap. The kernel has MAXUSERS 512, which should give us about 8200 process slots. After forking approx. 5100 children processes, the machine runs out of RAM, and starts using swap, after about 64K of swap is used (as shown by top), the machine freezes solid. No core, no logged messages, no socket activity, no messages on console, nothing. If someone can see a problem with the code, I would appreciate some pointers. But even if there IS a problem... You shouldn't be able to crash the system with a user program running with no privileges. If I take out the 'sleep(30)' from the child process, then this program runs fine, even with the loop counter set to 100,000 (one hundred thousand), because the child processes go away fast enough that I can only get about 400 of them running at any one time. The problem seems to be when the machine runs out of memory, and starts to swap. Here is the code, it was compiled with 'g++ -o test test.c' ----------------------------------------------------------- #include <iostream.h> #include <sys/types.h> #include <sys/wait.h> #include <signal.h> #include <unistd.h> //#include <stdlib.h> void sig_child(int i) { int pid; int status; while ( (pid =3D wait3(&status, WNOHANG, (struct rusage *) 0)) > 0) ; } main() { cout << "Hello World!" << endl; void sig_child(int i); signal(SIGCHLD, sig_child); int iIsParent; for(int i =3D 0; i < 8000; i++) { iIsParent =3D fork(); if(iIsParent < 0) { cout << "Error Forking!" << endl; } if(!iIsParent) { cout << "I'm child #" << i << endl; sleep(30); return 0; } } sleep(10); cout << "Parent done." << endl; return 0; } --=20 Elliot (efinley@efinley.com) Weird Science! To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-questions" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?38c85e65.27328632>