From owner-freebsd-questions Thu Mar 9 18:45:22 2000 Delivered-To: freebsd-questions@freebsd.org Received: from thor.afnetinc.com (thor.afnetinc.com [206.40.232.1]) by hub.freebsd.org (Postfix) with ESMTP id 349B037B912 for ; Thu, 9 Mar 2000 18:45:16 -0800 (PST) (envelope-from lists@efinley.com) Received: from 206-40-232-174-pm3-1.afnetinc.com ([206.40.232.174] helo=SCIENCE1) by thor.afnetinc.com with smtp (Exim 2.05 #1) id 12TFQN-0002LK-00 for freebsd-questions@FreeBSD.ORG; Thu, 9 Mar 2000 19:45:12 -0700 From: lists@efinley.com (Elliot Finley) To: freebsd-questions@FreeBSD.ORG Subject: Code that crashes 3.4-Stable Date: Fri, 10 Mar 2000 02:47:19 GMT Organization: Hiawatha Coal Company Reply-To: lists@efinley.com Message-ID: <38c85e65.27328632@mail.afnetinc.com> X-Mailer: Forte Agent 1.5/32.451 MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable Sender: owner-freebsd-questions@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG 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 #include #include #include #include //#include 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