Sponsored Content
Full Discussion: FreeBSD, fork() and zombies
Top Forums Programming FreeBSD, fork() and zombies Post 102502 by PsycoMan on Saturday 18th of March 2006 05:42:19 PM
Old 03-18-2006
Data FreeBSD, fork() and zombies

i'm writing small http proxy server (accept client -> connect to remote proxy server -> recv client's request -> send to remote proxy server -> get responce from remote proxy server -> send answer to client -> close connection to client and to remote proxy server) and having problems with fork(). when connections come to local port, i'm forking them to process the request. but when there are many (100+) simaltenious connections, childs become to work slower and die in 2-20 seconds. i have no limits for simaltenious incoming connections. when child dies it sends SIGCHLD signal to the parent application, which has a handler:

static void sig_chld(int no) {
while (waitpid(-1, NULL, WNOHANG) > 0);
}

and a set up function:
static void install_sig_handlers(void) {
struct sigaction sig_act;

sig_act.sa_handler = sig_chld;
sig_act.sa_flags = 0;
sigfillset(&sig_act.sa_mask);
sigaction(SIGCHLD, &sig_act, NULL);

sig_act.sa_handler = SIG_IGN;
sig_act.sa_flags = 0;
sigemptyset(&sig_act.sa_mask);
sigaction(SIGPIPE, &sig_act, NULL);
}

this works fine on my FreeBSD 4.4 server for 1-100 simaltenious connections from clients. but it becomes wierd when 100+ connections come: zombies start leaving in memory and their number grows. after several minutes of work with 100+ connections server goes down with about 10000 zombies in memory and 0% cpu idle, and at the same time none of my processes (parent or childs) loads the server (by `ps -awx` results) - neither cpu, nor memory.

please help me to find correct decision for this problem. Thanx.
 

10 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Zombies

Okay, I'm working within ansi C and Sun Solaris 7. I have a problem with zombies. I'm currently using the kill command to return the status of a process. How do I check for Zombie PIDs or the right function to return its PID from within a C program? (1 Reply)
Discussion started by: karpolu
1 Replies

2. UNIX for Dummies Questions & Answers

No zombies!

Is there a command that will automaticaly go through and kill all children when you try to kill the parent process. Thanks, David (3 Replies)
Discussion started by: nucca
3 Replies

3. HP-UX

How can i kill Zombies

Hi All I need help, how can i kill zombies instead of rebooting the system. Regards System: sna Tue Apr 5 17:50:23 2005 Load averages: 0.05, 0.15, 0.22 168 processes: 157 sleeping, 5 running, 6 zombies Cpu states: CPU LOAD USER NICE... (5 Replies)
Discussion started by: cgege
5 Replies

4. Programming

fork() help

Hi everybody, I wanna write a code to understand how fork works. my target -------------- -Parent creates a file(called temp) and writes into this file "1".Then it closes the file. -Then parent creates a child and wait until execution of this child ends. -Then child opens the same... (3 Replies)
Discussion started by: alexicopax
3 Replies

5. Programming

Fork and \n

Hi, I wrote a simple program for understanding the fork command. The code is as below int main(void) { fork(); printf("hi 1 \n"); fork(); printf("hi 2 \n"); fork(); printf("hi 3 \n"); } I am getting a variation in the number of times the printf is called if i remove the \n from each... (2 Replies)
Discussion started by: xyz123456
2 Replies

6. Programming

Application crashes in FreeBSD 7.1 while working ok in FreeBSD 6.3

Hello there, My mulithreaded application (which is too large to represent the source code here) is crashing after installing FreeBSD 7.1-RELEASE/amd64. It worked properly on others machines (Dual Cores with 4GB of RAM - FreeBSD 6.2-RELEASE/i386). The current machine has 2x Core 2 Duo... (1 Reply)
Discussion started by: Seenquev
1 Replies

7. UNIX for Dummies Questions & Answers

Zombies

I had a problem deleting a zombie process. It refused to be killed. I even tried kill -9 process# but it refused. Any other way of killing it? (7 Replies)
Discussion started by: victorn
7 Replies

8. Programming

Ways to eliminate Zombies?

what are the precautions to be taken care for avoiding zombie process ? (8 Replies)
Discussion started by: Gopi Krishna P
8 Replies

9. UNIX for Dummies Questions & Answers

fork()

I'm trying to run a simple test on how to use fork(), i'm able to execute the child process first then the parent, but how can I execute parent then child..? Thanks! (1 Reply)
Discussion started by: l flipboi l
1 Replies

10. UNIX for Dummies Questions & Answers

Help! Zombies

Hello, quick question: I have a zombie process listed with 'top' Could someone help me find out what it the PID is for it, so I can kill $PID. $ model 9000/800/rp3440 HP-UX bigassserver B.11.31 U 9000/800 3085785128 unlimited-user license thanks! System: bigassserver ... (23 Replies)
Discussion started by: olyanderson
23 Replies
CONNECT-PROXY(1)					      General Commands Manual						  CONNECT-PROXY(1)

NAME
connect-proxy -- connect over SOCKS4/5 proxy SYNOPSIS
connect-proxy [-dnhst45] [-R resolve ] [-p local-port ] [-w secs ] [-H [user@]proxy-server[:port]] ] [-S [user@]socks-server[:port]] ] [-T proxy-server[:port] ] [-c telnet-proxy-command ] [host] [port] DESCRIPTION
connect-proxy open connection over SOCKS4/5 proxies Please, note that any HTTP-Proxy tunnel won't work with content-inspection firewall (unless using SSL). OPTIONS
-H specifies a hostname and port number of the http proxy server to relay. If port is omitted, 80 is used. You can specify this value in the environment variable HTTP_PROXY and pass the -h option to use it. -S specifies the hostname and port number of the SOCKS server to relay. Like -H, port number can be omitted and the default is 1080. You can also specify this value pair in the environment variable SOCKS5_SERVER and give the -s option to use it. -4 specifies SOCKS relaying and indicates protocol version to use. It is valid only when used with '-s' or '-S'. Default is '-5' (protocol version 5) -R method to resolve the hostname. Three keywords ("local", "remote", "both") or dot-notation IP address are acceptable. The key- word "both" means, "Try local first, then remote". If a dot-notation IP address is specified, use this host as nameserver. The default is "remote" for SOCKS5 or "local" for others. On SOCKS4 protocol, remote resolving method ("remote" and "both") requires protocol 4a supported server. -p will forward a local TCP port instead of using the standard input and output. -P same to '-p' except keep remote session. The program repeats waiting the port with holding remote session without disconnecting. To connect the remote session, send EOF to stdin or kill the program. -w timeout in seconds for making connection with TARGET host. -d used for debug. If you fail to connect, use this and check request to and response from server. USAGE
To use proxy, this example is for SOCKS5 connection to connect to "host" at port 25 via SOCKS5 server on "firewall" host. connect-proxy -S firewall host 25 SOCKS5_SERVER=firewall; export SOCKS5_SERVER; connect-proxy -s host 25 For a HTTP-PROXY connection: connect-proxy -H proxy-server:8080 host 25 HTTP_PROXY=proxy-server:8080; export HTTP_PROXY; connect-proxy -h host 25 To forward a local port, for example to use ssh: connect-proxy -p 5550 -H proxy-server:8080 host 22 ssh -l user To use it along ssh transparently: # file://~/.ssh/config # not using proxy on lan Host 192.* ProxyCommand connect-proxy %h %p # mandatory to access the internet Host * ProxyCommand connect-proxy -H proxyserver:8080 %h %p Or for all users ( /etc/ssh/ssh_config ) ENVIRONMENT
SOCKS5_USER, SOCKS5_PASSWORD, HTTP_PROXY_USER, HTTP_PROXY_PASSWORD, CONNECT_PASSWORD, LOGNAME, USER SEE ALSO
ssh (1). WWW
http://www.meadowy.org/~gotoh/projects/connect AUTHOR
This manual page was written by Philippe Coval rzr@gna.org for the Debian system (but may be used by others). Permission is granted to copy, distribute and/or modify this document under the terms of the GNU General Public License, Version 2 any later version published by the Free Software Foundation. On Debian systems, the complete text of the GNU General Public License can be found in /usr/share/common-licenses/GPL. CONNECT-PROXY(1)
All times are GMT -4. The time now is 02:44 AM.
Unix & Linux Forums Content Copyright 1993-2022. All Rights Reserved.
Privacy Policy