PDA

View Full Version : [memory exhausted] compilazione kernel fallita


toni00t
17-07-2015, 19:07
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 ?

sacarde
18-07-2015, 07:57
su ubuntu?

letto?

http://wiki.ubuntu-it.org/AmministrazioneSistema/CompilazioneKernel


cosa vedi dai comandi:

free

ulimit -a

toni00t
18-07-2015, 08:28
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

sacarde
18-07-2015, 08:54
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

toni00t
18-07-2015, 09:26
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

sacarde
18-07-2015, 10:45
hai valorizzato:

export CONCURRENCY_LEVEL=2

?

toni00t
18-07-2015, 11:35
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 ?

sacarde
18-07-2015, 12:25
...
a cosa serve CONCURRENCY_LEVEL=2 ? per sfruttare i core della cpu ?


si, va bene non valorizzarla (almeno finche' non risolvi)

toni00t
18-07-2015, 16:47
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

sacarde
18-07-2015, 19:28
http://wiki.ubuntu-it.org/Hardware/DispositiviPartizioni/SwapDomandeFrequenti

toni00t
18-07-2015, 21:14
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.

toni00t
19-07-2015, 08:21
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

sacarde
19-07-2015, 08:44
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

toni00t
19-07-2015, 13:48
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

toni00t
19-07-2015, 13:57
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?

toni00t
19-07-2015, 14:33
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.

toni00t
19-07-2015, 15:07
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..

sacarde
19-07-2015, 15:24
e da:

df -H

?

toni00t
19-07-2015, 15:26
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

sacarde
19-07-2015, 15:59
non ho capito cosa vedi dai comandi:

ulimit -a (da root)

e

df

toni00t
21-07-2015, 18:51
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