maratrus
|
old hand
|
|
|
|
Рег.: 06.01.2007
|
Сообщений: 781
|
|
Рейтинг: 331
|
|
execve - ENOMEM
29.12.2009 01:06
|
|
|
Прошу подкинуть идей по решению следующей проблемы.
Есть проект (я не являюсь автором, взял как есть) - ~40 файлов на фортране. Получившиеся после компиляции объектные файлы линкуются вместе с парой статических библиотек (ar архивы), которые также тянутся вместе с проектом. В результате получается довольно большой исполняемый файл start.
code:
# du -sh start
809K start
# file start
start: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.0, dynamically linked (uses shared libs), for GNU/Linux 2.6.0, not stripped
Однако, исполнение этого файла заканчивается смертью процесса code:
# ./start
Killed
strace показал, что не могу сделать exec
code:
# strace -fF ./start
execve("./start", ["./start"], [/* 35 vars */]) = -1 ENOMEM (Cannot allocate memory)
+++ killed by SIGKILL +++
Process 7314 detached
Информация по памяти и лимитам code:
# cat /proc/meminfo
MemTotal: 482336 kB
MemFree: 50384 kB
Buffers: 39648 kB
Cached: 231264 kB
SwapCached: 20808 kB
Active: 315404 kB
Inactive: 83116 kB
HighTotal: 0 kB
HighFree: 0 kB
LowTotal: 482336 kB
LowFree: 50384 kB
SwapTotal: 369484 kB
SwapFree: 312976 kB
Dirty: 12 kB
Writeback: 0 kB
Mapped: 181516 kB
Slab: 17836 kB
CommitLimit: 610652 kB
Committed_AS: 328876 kB
PageTables: 2024 kB
VmallocTotal: 540664 kB
VmallocUsed: 7484 kB
VmallocChunk: 532468 kB
# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
max nice (-e) 20
file size (blocks, -f) unlimited
pending signals (-i) unlimited
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) unlimited
max rt priority (-r) unlimited
stack size (kbytes, -s) unlimited
cpu time (seconds, -t) unlimited
max user processes (-u) unlimited
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
В dmesg и логах тишина полная - нет абсолютно ничего.
Дополнительно, информация по системе и компилятору
code:
# uname -a
Linux anna 2.6.17-11-generic #2 SMP Thu Feb 1 19:52:28 UTC 2007 i686 GNU/Linux
# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=6.10
DISTRIB_CODENAME=edgy
DISTRIB_DESCRIPTION="Ubuntu 6.10"
# dpkg -S /usr/bin/gfortran
gfortran-4.0: /usr/bin/gfortran-4.0
Буду благодарен за любую помощь как траблшутить такую ситуацию и что можно подкрутить.
P.S. Пробывал на 2.6.26.1 ядре. Ситуация аналогичная
|
|
green
|
|
|
|
|
Рег.: 28.11.2002
|
Сообщений: 20916
|
Из: MSU
|
Рейтинг: 5080
|
|
|
Может у него есть сегменты неинициализированные, но которые оно требует аллоцировать при запуске? Не знаю, можно ли в ELF такое делать, но когда ассемблер изучали, то в exe такое вроде было. Попробуй там другие утилиты на бинарник натравить. nm или чего-то там из этой серии.
|
|
monoid
|
|
|
|
|
Рег.: 14.02.2004
|
Сообщений: 1689
|
Из: ГЗ::Б::12
|
Рейтинг: 1331
|
|
Re: execve - ENOMEM
[re: green]
29.12.2009 01:59
|
|
|
|
maratrus
|
old hand
|
|
|
|
Рег.: 06.01.2007
|
Сообщений: 781
|
|
Рейтинг: 331
|
|
|
Спасибо за readelf. Мне также удалось достать вывод readelf, натравленный на исходник того же проекта, но на машине, на которой все работает. Поэтому я могу выложить для сравнения readelf с моего компьютера и с работающего, только я что-то не понял, как текстовые файлы нормально прикреплять к сообщению (~1600 строк каждый). В FAQ написано, что этого делать нельзя.
|
|
monoid
|
|
|
|
|
Рег.: 14.02.2004
|
Сообщений: 1689
|
Из: ГЗ::Б::12
|
Рейтинг: 1331
|
|
|
файлы в .zip, .zip в аплоад, яйцо в зайца ну и далее по тексту
|
# |
|
maratrus
|
old hand
|
|
|
|
Рег.: 06.01.2007
|
Сообщений: 781
|
|
Рейтинг: 331
|
|
|
|
monoid
|
|
|
|
|
Рег.: 14.02.2004
|
Сообщений: 1689
|
Из: ГЗ::Б::12
|
Рейтинг: 1331
|
|
|
Там .bss (секция данных, которые инициализируются в 0 при старте) на 0x343f0288 = 876544648 байт, у тебя оперативка + своп в сумме меньше. Сомневаюсь, что даже подкручивание overcommit (man proc) может помочь. На машине ppc, видимо, было больше памяти. А хитрый g95 делает .bss меньше.
|
# |
|
maratrus
|
old hand
|
|
|
|
Рег.: 06.01.2007
|
Сообщений: 781
|
|
Рейтинг: 331
|
|
|
Похоже на правду, спасибо большое.
|
|
monoid
|
|
|
|
|
Рег.: 14.02.2004
|
Сообщений: 1689
|
Из: ГЗ::Б::12
|
Рейтинг: 1331
|
|
|
А попробуй все-таки подкрутить overcommit
|
# |
|
maratrus
|
old hand
|
|
|
|
Рег.: 06.01.2007
|
Сообщений: 781
|
|
Рейтинг: 331
|
|
|
code:
# cat /proc/sys/vm/overcommit_memory
0
# ./start
Killed
# echo 1 > /proc/sys/vm/overcommit_memory
#./start
Fortran runtime error: Success
|
|
monoid
|
|
|
|
|
Рег.: 14.02.2004
|
Сообщений: 1689
|
Из: ГЗ::Б::12
|
Рейтинг: 1331
|
|
|
Quote:
Fortran runtime error: Success
Типа, очевидные аналогии с классическими виндовыми ляпами уже никому не интересны?

|
# |
|