Node.js: o que é o erro ENOSPC e como resolver?


349

Estou com um problema no Node.js e no upload de arquivos para o servidor. Para carregar arquivos no servidor, eu uso este plugin . Ao iniciar o upload do arquivo para o servidor, o processo do Node.js travou e mostra o erro:

Erro: ENOSPC.

O código do servidor não é executado.

$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/xvda1      7.9G  4.1G  3.5G  55% /
udev            288M  8.0K  288M   1% /dev
tmpfs           119M  168K  118M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            296M     0  296M   0% /run/shm
/dev/xvdf       9.9G  3.0G  6.5G  32% /vol
overflow        1.0M  1.0M     0 100% /tmp

11
"ENOSPC" significa que não há espaço na unidade, então onde você salva seu arquivo? ou talvez / tmp esteja cheio?
Jacob A.

Eu salvo arquivos em / dev / xvda1. Posso criar rm -rf / tmp / *?
Giffo 18/03

11
sim, mas eu não acho 1mb é suficiente para fileuploads, então mudar o tmp-dir para outro local como na resposta de Blu Anjo
Jacob A.

3
Parece que o seu caso de uso pode ser diferente, mas aqui está uma ótima solução para esse problema de outra questão SO.
Isaac Gregson

Para quem se deparar com isso, confira esta resposta também . O uso de grunt e gulp pode usar muitos relógios, então esta resposta detalha como aumentar isso.
Seiyria

Respostas:


1273

Execute o comando abaixo para evitar o ENOSPC:

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

Para o Arch Linux, adicione esta linha a /etc/sysctl.d/99-sysctl.conf:

fs.inotify.max_user_watches=524288

Em seguida, execute:

sysctl --system

Isso também persistirá nas reinicializações. Fonte de detalhes técnicos


24
Aqui está o que ele faz. github.com/guard/listen/wiki/…
Agus Syahputra

2
Não é um número aleatório. Cada relógio inotify usado ocupa 540 bytes (sistema de 32 bits) ou 1 kB (duplo em 64 bits). Isso sai da memória do kernel, que não pode ser trocada. Portanto, supondo que você defina o máximo em 524288 e que todos foram usados ​​(improvável), você usaria aprox. 256 MB / 512 MB de memória do kernel de 32 bits / 64 bits.
Murali Krishna

Teoricamente, não há valor máximo, desde que você tenha RAM suficiente. Na prática, o 524288 foi oficialmente recomendado pelos aplicativos e as pessoas o definiram para 2 milhões, com o uso de memória que o acompanha.
Murali Krishna

Isso me ajudou a resolver o problema também neste link github.com/guard/listen/wiki/… tem todos os detalhes. Graças
amitsin6h

Alguém mais acha estranho que o erro que sai seja simples ENOSPC? Por que não ter uma descrição logo após a saída como ENOSPC - no space on drive? Claro, o código de erro faz sentido uma vez que você sabe o que significa ( E rror NO SP de C e), mas por que não apenas dão aos usuários essa informação na frente?
Shadoninja 21/06/19

73

ENOSPC significa que não há espaço na unidade.

Talvez /tmpesteja cheio? Você pode configurar npmpara usar uma pasta temporária diferente npm config set tmp /path/to/some/other/dir, definindo ou talvez excluir tudo da /tmppasta.

Fonte: npm 1.1.21 não é possível escrever, ENOSPC no repositório do npm no github.

Observe que resolvi meu problema da maneira descrita na fonte acima. No entanto, veja a resposta de Murali Krishna abaixo, que é mais abrangente.


Limpei a pasta / tmp e alterei a pasta temp do npm, mas tenho o mesmo problema. npm config get tmpshow / vol / deploy / tmp
Giffo

você pode mostrar sua opinião novamente? saída que você obtém Após a mudança de dir
Blu

events.js:71 throw arguments[1]; // Unhandled 'error' event Error: ENOSPC, write
Giffo 18/03/2014

11
você tem ouvinte de erro? se não do que escrever um e, em seguida, verifique a saída resultou
Blu

72
errado, esse erro ocorre frequentemente nos espaços de trabalho do desenvolvedor ao assistir arquivos (via grunt / gulp). Isso tem a ver com um limite unix de quantos arquivos um processo pode assistir (exibição nativa). A outra resposta (eco fs.inotify.max_user_watches = 524288) é a solução nesses casos.
Cancerbero


20

Uma maneira simples de resolver meu problema foi:

npm cache clear

NPM ou um processo controlado por ele está assistindo a muitos arquivos. Atualizar max_user_watches no nó de construção pode corrigi-lo para sempre. Para debian, coloque o seguinte no terminal:

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

Se você quiser saber como aumentar a quantidade de inotify watchers, clique apenas no link.


2
Eu tenho esse problema com forever,fixa-lo quando eu criar o arquivo .foreverignoree adicionar-lhes pastanode_modules.
Vilintritenmert

7

Reiniciar a máquina resolveu o problema para mim. Tentei limpar pela primeira vez, /tmp/mas o nó ainda estava reclamando.


O problema voltou após a reinicialização. Fazendo dedupeajudou.
Parnab Sanyal 29/11

4

No Linux, é provável que seja um limite no número de visualizações de arquivos.

O servidor de desenvolvimento usa o inotify para implementar o hot-reloading. A API inotify permite que o servidor de desenvolvimento observe arquivos e seja notificado quando eles mudam.

O limite padrão de observação de arquivos inotify varia de distribuição para distribuição (8192 no Fedora). As necessidades do servidor de desenvolvimento geralmente excedem esse limite.

A melhor abordagem é tentar aumentar temporariamente o limite de exibição de arquivos temporariamente e fazer com que uma configuração permanente seja alterada se você estiver satisfeito com isso. Observe, no entanto, que isso altera a configuração de todo o sistema, não apenas o nó.

Para visualizar seu limite atual:

sysctl fs.inotify.max_user_watches

Para definir temporariamente um novo limite:

# this limit will revert after reset
sudo sysctl fs.inotify.max_user_watches=524288
sudo sysctl -p
# now restart the server and see if it works

Para definir um limite permanente:

echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

Obrigado, isso resolveu meu problema.
Josh

obrigado!! sua solução temporariamente funciona!
JRichardsz 12/06

3

No Ubuntu 18.04, tentei um truque usado para reativar o arquivo assistindo por ionic / node, e ele também funciona aqui. Isso pode ser útil para quem não tem acesso aos arquivos conf do sistema.

CHOKIDAR_USEPOLLING=1 npm start

2

Resolvi meu problema matando todos os processos de controle de rastreador (você pode tentar se usar o GDM, obviamente não é o seu caso se o script estiver sendo executado em um servidor)

tracker-control -r

Minha configuração: Arch with GNOME 3


11
Esqueci de especificar, sim, eu estava na mesma situação: Arch + GNOME
Denys Vitali 23/03

2

Se sua /tmpmontagem em um sistema de arquivos linux é montada como excedente (geralmente dimensionada em 1 MB), isso provavelmente ocorre porque você não especificou /tmpcomo sua própria partição e seu sistema de arquivos raiz /tmpfoi preenchido e foi remontado como um substituto.

Para corrigir isso depois de liberar espaço, desmonte o fallback e ele deverá remontar no ponto original:

sudo umount overflow

2

Se você encontrar este erro durante a tentativa de executar o ember servercomando, por favor, rm -rf tmpdiretório. Então corra ember snovamente. Isso me ajudou.


2

Eu estava tendo o mesmo erro. Enquanto eu executo o aplicativo Reactjs. O que faço é remover a pasta node_modules e digite e instale o node_modules novamente. Isso remove o erro.


isso realmente funciona, por que está com voto negativo - é a questão. Mas isso resolve o problema, então o que você mais precisa?
AlexNikonov 25/06/19

11
Não sei, pode ser que as pessoas tenham algum problema pessoal comigo. hahaha
Ghayyas Mubashir

1

Para mim, atingi o número máximo de arquivos que um usuário pode possuir

Verifique seus números com quota -se se o número nos arquivos não está muito próximo da cota


1

Isso parece muito estranho, mas sim, um sistema é reiniciado ou killall noderesolve o problema para mim.


-15

No meu caso, no linux, sudoing corrigiu o problema.

Exemplo:

sudo gulp dev

5
Isso é perigoso! Provavelmente foi bem-sucedido porque uma certa porcentagem de espaço em disco é reservada para raiz, o que não soluciona o problema principal - não há espaço disponível como usuário não privilegiado (no local de destino).
Liam Dawson

Usar o sudo é uma ótima maneira de fazer as coisas acontecerem, mas a maioria das pessoas esquece de entender tudo o que acontece quando o sudo é usado. Particularmente nos módulos npm e npm, o uso do sudo pode resultar em coisas executadas pelo root que o usuário não deseja que sejam executadas pelo root, como criação de arquivo ou uso de portas protegidas. Basicamente, o conselho "use sudo" cai de cara no chão (talvez depois de tropeçar e olhar para o sol por um momento) no que diz respeito a nvm / npm / node.
precisa saber é o seguinte
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.