[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <1288850821.2718.47.camel@edumazet-laptop>
Date: Thu, 04 Nov 2010 07:07:01 +0100
From: Eric Dumazet <eric.dumazet@...il.com>
To: springzhong <davidmahorse@...il.com>
Cc: linux-kernel@...r.kernel.org
Subject: Re: out of memory error from kernel when I open hundred of
thousands of TCP connections
Le jeudi 04 novembre 2010 à 13:58 +0800, springzhong a écrit :
> The source of serve is like:
> ListeningThread listeningThread(this, nPortNum);
> listeningThread.nPortNum=6475;
> listeningThread.Start();
> ListeningThread listeningThread2(this, 6476);
> listeningThread2.nPortNum=6476;
> listeningThread2.Start();
> ListeningThread listeningThread3(this, 6477);
> listeningThread3.nPortNum=6477;
> listeningThread3.Start();
> ListeningThread listeningThread4(this, 6477);
> listeningThread4.nPortNum=6478;
> listeningThread4.Start();
>
> The source of client is like:
> for (int i = 0; i < 60000; i++)
> {
> this->Connect("127.0.0.1", nPortNum, false, pClientSocket);
> this->Connect("127.0.0.1", 6476, false, pClientSocket);
> this->Connect("127.0.0.1", 6477, false, pClientSocket);
> this->Connect("127.0.0.1", 6478, false, pClientSocket);
> }
>
> I want to test the maximum tcp connections of linux in my netbook with
> 2G memeory.
> But I just found It cannot exceed 240000 connections.Then an
> "out of memory error" occured. But it looks like there is still a lot of
> free memory in my computer.
>
> I want to rechange the kernel to accept more TCP connections like one
> million tcp connections in my network.
> But I find there are too many source codes in it.
> Could you give me any suggestions?
> I have changed my environment like this with epoll:
> /etc/security/limits.conf
> * soft nofile 802400
> * hard nofile 802400
> # End of file
>
> cat /proc/sys/fs/file-max
> 2204218
>
> cat /etc/sysctl.conf
> net.ipv4.ip_local_port_range = 1024 65000
>
> cat /proc/sys/fs/epoll/max_user_watches
> 2500873
>
> It is not the limitation of file ids of linux.It is an error from kernel
> of LINUX
>
If you run a 32bit kernel, you probably hit a LOWMEM limit : sockets
structures are kernel structures, allocated from LOWMEM zone.
This is about 900 MBytes in 32bit kernel, even if you have 4GB of total
ram.
grep Low /proc/meminfo
If your netbook has 2GB of memory, you could compile a kernel with a
2G/2G User/Kernel split
CONFIG_VMSPLIT_2G=y
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists