2012-03-28 17 views
24

Sono nuovo di git. Sono vuole spingere un grande impegnano a un server remoto, ma il problema è quando usogit push fatale: impossibile creare thread: risorsa temporaneamente non disponibile

git push origin master 

esso restituire l'errore

Counting objects: 5009, done. 
Delta compression using up to 16 threads. 
fatal: unable to create thread: Resource temporarily unavailable 
error: pack-objects died with strange error 

è così c'è qualche cosa che posso impostare il filo max utilizzare per la compressione Delta.

Grazie per l'aiuto,

Yuan Chen

+0

comandi è possibile eseguire per limitare la quantità di memoria che imballaggio può prendere accedendo al sistema remoto git config --global pack.windowMemory "100 m" '' 'git config pack.packSizeLimit --global" 100m "' 'git config --global pack.threads" 1 "' – Adnan

risposta

2

"unable to create thread: Resource temporarily unavailable" indica un problema con il server remoto (come la non più memoria disponibile).

Per quanto riguarda Delta, sono disponibili le seguenti config di modificare:

pack.deltaCacheSize 

The maximum memory in bytes used for caching deltas in git-pack-objects(1) before writing them out to a pack.
This cache is used to speed up the writing object phase by not having to recompute the final delta result once the best match for all objects is found.
Repacking large repositories on machines which are tight with memory might be badly impacted by this though, especially if this cache pushes the system into swapping.
A value of 0 means no limit.
The smallest size of 1 byte may be used to virtually disable this cache. Defaults to 256 MiB.

pack.deltaCacheLimit 

The maximum size of a delta, that is cached in git-pack-objects(1).
This cache is used to speed up the writing object phase by not having to recompute the final delta result once the best match for all objects is found. Defaults to 1000.

La questione SO "Git pull fails with bad pack header error" fa riferimento ad altri pack configurazioni -related.

2

Ho anche incappato in questo errore. Per semplificare, questo errore si verifica perché si desidera copiare un file da 100 MB in un hdd con uno spazio libero di 50 MB (o inferiore). Per risolvere questo problema, SSH nel server ed eseguire i seguenti comandi:

git config --global pack.windowMemory "100m" 
git config --global pack.packSizeLimit "100m" 
+2

Dovrebbe essere 'pack.packSizeLimit' not' pack.SizeLimit'. – yig

75

L'errore: "fatale: in grado di creare un thread: Risorsa temporaneamente non disponibile" suggerisce fortemente si è a corto di memoria sul server, che può accadere se si dispone di un repository con un sacco di file di grandi dimensioni, che possono causare il reimballaggio per richiedere molta memoria o memoria virtuale limitata - in generale o solo per quell'account a causa dell'impostazione ulimit.

In ogni modo, ecco i comandi è possibile eseguire per limitare la quantità di memoria che imballaggio può prendere accedendo al sistema remoto (come l'utente che git viene eseguito come) e digitando questi comandi:

git config --global pack.windowMemory "100m" 
git config --global pack.packSizeLimit "100m" 
git config --global pack.threads "1" 

Speranza questo funziona

+15

Un sacco di soluzioni di hosting condiviso limitano i thread in modo specifico. Solitamente portandolo a <10 esclusivamente con l'ultimo comando in questa risposta si risolve il problema. – Qix

+1

Ho riscontrato questo problema sul mio host condiviso cercando di "git push" su remoto. Impostando 'pack.threads" 10 "' lo ha risolto per me. Ho avuto un problema simile durante il tentativo di eseguire 'git gc' quando è arrivato alla fase di re-pack. Stessa correzione. Saluti. –

+1

Se il server utilizza il protocollo smart http, potrebbe non essere possibile impostare una configurazione globale per il processo. Invece, 'cd' nella directory del repository git stesso ed esegui gli stessi comandi senza' --global'. – yig

Problemi correlati