delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2002/01/28/03:32:15

Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sources.redhat.com/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sources.redhat.com/ml/#faqs>
Sender: cygwin-owner AT cygwin DOT com
Delivered-To: mailing list cygwin AT cygwin DOT com
From: "Frank Seide" <seide AT mac DOT com>
To: <cygwin AT cygwin DOT com>
Subject: cannot allocate >256 MB?
Date: Mon, 28 Jan 2002 16:31:47 +0800
Message-ID: <FE3A5416EBDD83408F14F09EBA564744031BDFA8@bjs-msg-01.fareast.corp.microsoft.com>
MIME-Version: 1.0
X-Priority: 3 (Normal)
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook, Build 10.0.3416
Importance: Normal
X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4807.1700

Hi,

I'm having trouble with a perl script under cygwin/perl that uses a lot
of memory.
Cygwin seems to blow up when allocating >256 MB.

1) At the moment memory allocation reaches apparently 256 MB
(virtual-memory size shown in the Win Task Mgr), the script terminates
with the message "Out of memory".
The machine has >1 GB physical memory and has successfully run other
programs with >256 MB memory usage.

2) After the above termination, the cygwin library has a hick-up:
 - a simple "ls" gives a seg fault
 - trying to open another rxvt window (while the shell in which the
script terminated is still open) shows the msg
    handle_exceptions: Exception: STATUS_ACCESS_VIOLATION

The hick-up can be fixed by exiting the shell (in which the script
terminated) first,
such that all cygwin processes are gone (and cygwin1.dll gets unloaded,
I guess).

Repro case (script and screen output) is included below.
For the repro case, the highest "VM Size" I see before it terminates was
230 MB.
In the real problem script, which grows memory more slowly, I see
VM-Size = 26x,xxx \approx 2^18.

Version info:
 - This is perl, version 5.005_03 built for cygwin32
 - WinNT Ver 5.0 build 2195 Service Pack 2
 - Cygwin DLL version info:
        dll major: 1003
        dll minor: 2
        dll epoch: 19
        dll bad signal mask: 19005
        dll old termios: 5
        dll malloc env: 28
        api major: 0
        api minor: 39
        shared data: 3
        dll identifier: cygwin1
        mount registry: 2
        cygnus registry name: Cygnus Solutions
        cygwin registry name: Cygwin
        program options name: Program Options
        cygwin mount registry name: mounts v2
        cygdrive flags: cygdrive flags
        cygdrive prefix: cygdrive prefix
        cygdrive default prefix: 
        build date: Sun May 20 23:28:17 EDT 2001
        shared id: cygwin1S3


(Does cygwin really have a limit of 256 MB!?!? Wouldn't that make it
kind of a toy?)

Thanks,

Frank


--- script to reproduce ("test.pl")

#!/usr/local/bin/perl

print STDERR "filling..";

$n = 2000000;
@proto[$n] = 0;
for ($i = $n; $i >= 0; $i--)
{
  if ($i % 100000 == 0) { print STDERR "."; }
  $proto[$i] = "acbdefghijklmnopqrstuvwxyz";
}
$m = 0;

print STDERR "\nduplicating...\n";

@a = @proto; ++$m; print STDERR  "$m\n"; sleep 1;
@b = @proto; ++$m; print STDERR  "$m\n"; sleep 1;
@c = @proto; ++$m; print STDERR  "$m\n"; sleep 1;
@d = @proto; ++$m; print STDERR  "$m\n"; sleep 1;
@e = @proto; ++$m; print STDERR  "$m\n"; sleep 1;
@f = @proto; ++$m; print STDERR  "$m\n"; sleep 1;
@g = @proto; ++$m; print STDERR  "$m\n"; sleep 1;
@h = @proto; ++$m; print STDERR  "$m\n"; sleep 1;
@i = @proto; ++$m; print STDERR  "$m\n"; sleep 1;
@j = @proto; ++$m; print STDERR  "$m\n"; sleep 1;
@k = @proto; ++$m; print STDERR  "$m\n"; sleep 1;
@l = @proto; ++$m; print STDERR  "$m\n"; sleep 1;
@m = @proto; ++$m; print STDERR  "$m\n"; sleep 1;
@n = @proto; ++$m; print STDERR  "$m\n"; sleep 1;
@o = @proto; ++$m; print STDERR  "$m\n"; sleep 1;
@p = @proto; ++$m; print STDERR  "$m\n"; sleep 1;
@q = @proto; ++$m; print STDERR  "$m\n"; sleep 1;
@r = @proto; ++$m; print STDERR  "$m\n"; sleep 1;
@s = @proto; ++$m; print STDERR  "$m\n"; sleep 1;
@t = @proto; ++$m; print STDERR  "$m\n"; sleep 1;
@u = @proto; ++$m; print STDERR  "$m\n"; sleep 1;
@v = @proto; ++$m; print STDERR  "$m\n"; sleep 1;
@w = @proto; ++$m; print STDERR  "$m\n"; sleep 1;
@x = @proto; ++$m; print STDERR  "$m\n"; sleep 1;
@y = @proto; ++$m; print STDERR  "$m\n"; sleep 1;
@z = @proto; ++$m; print STDERR  "$m\n"; sleep 1;


--- screen output

% ls -l
... (works correctly)
% ./test.pl
filling.......................
duplicating...
1
Out of memory!
% ls -l
Segmentation fault (core dumped)
%


--
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple
Bug reporting:         http://cygwin.com/bugs.html
Documentation:         http://cygwin.com/docs.html
FAQ:                   http://cygwin.com/faq/

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019