View Full Version : [memory exhausted] compilazione kernel fallita
ciao ; premetto che prima di postare ho cercato nel forum e nel web , ma senza risultato :
ho tentato di compilare il kernel 3.19 ed ho ottenuto il seguente errore :
ld: final link failed: Memory exhausted
Makefile:935: recipe for target 'vmlinux' failed
make: *** [vmlinux] Error 1
ho 4 gb di ram ; qualcuno sa a cosa può essere dovuto il problema ?
su ubuntu?
letto?
http://wiki.ubuntu-it.org/AmministrazioneSistema/CompilazioneKernel
cosa vedi dai comandi:
free
ulimit -a
su ubuntu?
letto?
http://wiki.ubuntu-it.org/AmministrazioneSistema/CompilazioneKernel
cosa vedi dai comandi:
free
ulimit -a
ho tentato questa strada ieri , ma senza successo : la ritento di nuovo adesso (nella speranza che dovevo riavviare la macchina );
quasi tutto unlimited eccetto lo stack (8192) che però avevo impostato con
ulimit -s 256636
ps : ho ritentato e l'errore è lo stesso
ecco l'output di ulimit -a
seiya@seiya:/home/john/linux.$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 31001
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 256636
cpu time (seconds, -t) unlimited
max user processes (-u) 31001
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
su che versione di ubuntu sei?
quali sorgenti del kernel usi?
pabloski
18-07-2015, 08:59
ciao ; premetto che prima di postare ho cercato nel forum e nel web , ma senza risultato :
ho tentato di compilare il kernel 3.19 ed ho ottenuto il seguente errore :
ld: final link failed: Memory exhausted
Makefile:935: recipe for target 'vmlinux' failed
make: *** [vmlinux] Error 1
ho 4 gb di ram ; qualcuno sa a cosa può essere dovuto il problema ?
due possibilità mi vengono in mente:
1. la tmp è in ram e in genere è la metà della ram disponibile ( valore massimo, si restringe se la ram è occupata da altre cose )
2. sta usando le pipe per la compilazione e la ram è ovviamente poca
su che versione di ubuntu sei?
quali sorgenti del kernel usi?
ho scaricato i sorgenti dai repository con linux-source :
sto tentando di compilare il linux-source-3.19.0
due possibilità mi vengono in mente:
1. la tmp è in ram e in genere è la metà della ram disponibile ( valore massimo, si restringe se la ram è occupata da altre cose )
2. sta usando le pipe per la compilazione e la ram è ovviamente poca
Pablo come faccio a capire se le 2 condizioni da te citate sono vere ?
pabloski
18-07-2015, 09:58
Pablo come faccio a capire se le 2 condizioni da te citate sono vere ?
1. comando df da terminale, se esce una cosa tipo tmpfs 8167956 8 8167948 1% /tmp allora /tmp sta in ram
2. guarda quello che compare durante la compilazione, se c'è -pipe nelle righe che riguardano gcc, allora stai usando le pipe
hai valorizzato:
export CONCURRENCY_LEVEL=2
?
hai valorizzato:
export CONCURRENCY_LEVEL=2
?
la partizione /tmp è in ram effettivamente :
ho notato una cosa : devo dare make clean per ripulire tutto o mi da immediatamente lo stesso errore ;
forse avrei anche dovuto dare il clean prima di cambiare la dimensione dello stack con il comando ulimit.
Ho fatto ripartire la compilazione e come necessita di un bel po di tempo :
a cosa serve CONCURRENCY_LEVEL=2 ? per sfruttare i core della cpu ?
...
a cosa serve CONCURRENCY_LEVEL=2 ? per sfruttare i core della cpu ?
si, va bene non valorizzarla (almeno finche' non risolvi)
mi è stato fatto notare in un altro forum che non ho la partizione di swap :
è un problema ?
pabloski
18-07-2015, 17:02
mi è stato fatto notare in un altro forum che non ho la partizione di swap :
è un problema ?
si, perchè quando manca la memoria ram fisica, il sistema scarica parti di dati ed applicazioni nella partizione di swap, liberando così parte della ram
in caso contrario devi rimontare la /tmp su una partizione del disco fisso, in modo che tutti gli "scarti" della compilazione finiscano sul disco e non in ram
http://wiki.ubuntu-it.org/Hardware/DispositiviPartizioni/SwapDomandeFrequenti
ho creato una partizione di swap da 4 gb , formattata e attivata con swapon , ma non è servito a nulla !
pabloski
18-07-2015, 22:19
ho creato una partizione di swap da 4 gb , formattata e attivata con swapon , ma non è servito a nulla !
Puoi controllare mentre sta compilando, che fine fa la memoria? Se si riempie allora il problema è quello che dicevo.
Puoi controllare mentre sta compilando, che fine fa la memoria? Se si riempie allora il problema è quello che dicevo.
ciao la memoria non è piena : ho controllato con top !
ho notato comunque una cosa : se do
sudo make clean
pulisce tutto e rilanciando
sudo make
necessita di 2 ore per compilare e restituirmi l'errore ;
se non do sudo make clean invece mi restituisce l'errore dopo 5 minuti
le partizioni le vedi dal comando:
df -H
la memoria dal comando:
free
- per compilare stai utilizando il metodo generico, vero?
hai provato con il metodo ubuntu? (dal link di sopra)
pulisce:
make-kpkg --rootcmd fakeroot clean
compila:
make-kpkg --rootcmd fakeroot --initrd kernel_image kernel_headers modules_image
pabloski
19-07-2015, 09:03
necessita di 2 ore per compilare e restituirmi l'errore ;
se non do sudo make clean invece mi restituisce l'errore dopo 5 minuti
appunto, significa che c'è qualcosa che si riempie
se non è la memoria, dev'essere il disco
comunque non usare top, usare cat /proc/meminfo se vuoi informazioni affidabili in questo caso
le partizioni le vedi dal comando:
la memoria dal comando:
- per compilare stai utilizando il metodo generico, vero?
hai provato con il metodo ubuntu? (dal link di sopra)
pulisce:
compila:
inutile : lo stesso errore
ld: final link failed: Memory exhausted
Makefile:935: recipe for target 'vmlinux' failed
make[1]: *** [vmlinux] Error 1
make[1]: Leaving directory '/home/john/linux-source-3.19.0'
debian/ruleset/targets/common.mk:295: recipe for target 'debian/stamp/build/kernel' failed
make: *** [debian/stamp/build/kernel] Error 2
appunto, significa che c'è qualcosa che si riempie
se non è la memoria, dev'essere il disco
comunque non usare top, usare cat /proc/meminfo se vuoi informazioni affidabili in questo caso
MemTotal: 3989060 kB
MemFree: 1949836 kB
MemAvailable: 2476460 kB
Buffers: 63460 kB
Cached: 889468 kB
SwapCached: 5756 kB
Active: 918892 kB
Inactive: 978892 kB
Active(anon): 528996 kB
Inactive(anon): 693752 kB
Active(file): 389896 kB
Inactive(file): 285140 kB
Unevictable: 48 kB
Mlocked: 48 kB
HighTotal: 3130316 kB
HighFree: 1725460 kB
LowTotal: 858744 kB
LowFree: 224376 kB
SwapTotal: 4653052 kB
SwapFree: 4461624 kB
Dirty: 712 kB
Writeback: 0 kB
AnonPages: 941936 kB
Mapped: 391880 kB
Shmem: 277892 kB
Slab: 95728 kB
SReclaimable: 74344 kB
SUnreclaim: 21384 kB
KernelStack: 4088 kB
PageTables: 14612 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 6647580 kB
Committed_AS: 4308680 kB
VmallocTotal: 122880 kB
VmallocUsed: 25176 kB
VmallocChunk: 96992 kB
AnonHugePages: 221184 kB
CmaTotal: 0 kB
CmaFree: 0 kB
HugePages_Total: 0
HugePages_Free: 0
HugePages_Rsvd: 0
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 55288 kB
DirectMap2M: 858112 kB
pabloski
19-07-2015, 14:15
quelle sono le statistiche della memoria prima o durante la compilazione?
quelle sono le statistiche della memoria prima o durante la compilazione?
l'unica anomalia è la memoria che scende a 696 mb liberi ;
comunque il problema , ripeto , si verifica dopo 5 minuti se non lancio un make clean o dopo 2 ore se lo lancio
pabloski
19-07-2015, 14:45
Mi verrebbe da pensare allo stack, ma 10MB non sono pochi.
Verifica un'ultima volta la situazione, in particolare se lo swap è attivo e se la dimensione è sufficiente.
Prima di avviare la compilazione, apri un terminale e digita free -ms 2 così da poter vedere come si evolve l'allocazione della memoria durante la compilazione.
Mi verrebbe da pensare allo stack, ma 10MB non sono pochi.
Verifica un'ultima volta la situazione, in particolare se lo swap è attivo e se la dimensione è sufficiente.
Prima di avviare la compilazione, apri un terminale e digita free -ms 2 così da poter vedere come si evolve l'allocazione della memoria durante la compilazione.
gia fatto , ma il problema non si vede :
inoltre ho 4gb di ram e 4gb di swap per cui non è realistico..
gia fatto : il problema è probabilmente che non riesce a linkare :
questa è la riga 935 del file make
935 +$(call if_changed,link-vmlinux)
quando arriva a questa riga di codice genera l'errore
non ho capito cosa vedi dai comandi:
ulimit -a (da root)
e
df
ciao ho risolto il problema principale ( quello della memoria exhausted ) per cui in questo caso questo thread lo concludo qui con la soluzione e ne apro un altro :
per risolvere ho semplicemente ,come linker , sostituito ld con gold
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.