Tôi nhận được lỗi này trong khi làm một rebase git svn trong CygwinTại sao Git.pm trên Cygwin lại phàn nàn về yêu cầu 'Hết bộ nhớ trong khi' lớn '?
Out of memory during "large" request for 268439552 bytes, total sbrk() is 140652544 bytes at /usr/lib/perl5/site_perl/Git.pm line 898, <GEN1> line 3.
268439552 là 256MB. Kích thước bộ nhớ tối đa của Cygwin được đặt thành 1024MB vì vậy tôi đoán rằng nó có kích thước bộ nhớ tối đa khác nhau cho perl?
Làm cách nào để tăng kích thước bộ nhớ tối đa mà các chương trình perl có thể sử dụng?
update: Đây là nơi các lỗi xảy ra (trong Git.pm):
while (1) {
my $bytesLeft = $size - $bytesRead;
last unless $bytesLeft;
my $bytesToRead = $bytesLeft < 1024 ? $bytesLeft : 1024;
my $read = read($in, $blob, $bytesToRead, $bytesRead); //line 898
unless (defined($read)) {
$self->_close_cat_blob();
throw Error::Simple("in pipe went bad");
}
$bytesRead += $read;
}
Tôi đã thêm một bản in trước khi dòng 898 để in ra $ bytesToRead và $ bytesRead và kết quả là 1024 cho $ bytesToRead và 134220800 cho $ bytesRead, do đó, nó đọc 1024 byte tại một thời điểm và nó đã đọc 128MB. Chức năng 'đọc' của Perl phải hết bộ nhớ và đang cố gắng yêu cầu gấp đôi kích thước bộ nhớ của nó ... có cách nào để xác định dung lượng bộ nhớ cần yêu cầu không? hoặc là thực hiện phụ thuộc?
UPDATE2: Trong khi thử nghiệm cấp phát bộ nhớ trong Cygwin: đầu ra chương trình C này là 1536MB
int main() {
unsigned int bit=0x40000000, sum=0;
char *x;
while (bit > 4096) {
x = malloc(bit);
if (x)
sum += bit;
bit >>= 1;
}
printf("%08x bytes (%.1fMb)\n", sum, sum/1024.0/1024.0);
return 0;
}
Trong khi chương trình perl này bị rơi nếu kích thước tập tin lớn hơn 384MB (nhưng thành công nếu kích thước tập tin là ít).
open(F, "<400") or die("can't read\n");
$size = -s "400";
$read = read(F, $s, $size);
Lỗi này là tương tự
Out of memory during "large" request for 536875008 bytes, total sbrk() is 217088 bytes at mem.pl line 6.
Bạn có chắc chắn rằng Cygwin cofiguration là vấn đề ở đây không? Msys git đi kèm với msys perl (thường là 'C: \ Program Files \ Git \ bin \ perl.exe'). Tôi không chắc chắn những gì xảy ra dưới Cygwin, nhưng theo win32 giao diện điều khiển sử dụng, msysgit sử dụng perl của nó thay vì các perls khác trên hệ thống của tôi. – daotoad
Ah có bạn đúng, nhưng kiểm tra bộ nhớ perl của tôi sử dụng phiên bản của perl Cygwin và nó có vấn đề này cũng như –