Node.js: lỗi ENOSPC là gì và cách giải quyết?


349

Tôi gặp sự cố với Node.js và tải tệp lên máy chủ. Để tải tập tin lên máy chủ, tôi sử dụng plugin này . Khi bắt đầu tải tệp lên máy chủ, quá trình Node.js bị lỗi và hiển thị lỗi:

Lỗi: ENOSPC.

Mã máy chủ không chạy.

$ 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

1
"ENOSPC" có nghĩa là không có dung lượng trên ổ đĩa, vậy bạn lưu tệp của mình ở đâu? hoặc có thể / tmp đã đầy?
Jacob A.

Tôi lưu các tập tin trong / dev / xvda1. Tôi có thể tạo rm -rf / tmp / * không?
Giffo

1
có, nhưng tôi không nghĩ 1mb là đủ cho tải tập tin, vì vậy hãy thay đổi tmp-dir sang một vị trí khác như trong câu trả lời từ Blu Angel
Jacob A.

3
Âm thanh như trường hợp sử dụng của bạn có thể khác, nhưng đây là một giải pháp tuyệt vời cho vấn đề này từ một câu hỏi SO khác.
Isaac Gregson

Đối với bất kỳ ai vấp phải điều này, hãy xem câu trả lời này là tốt . Sử dụng grunt và gulp có thể sử dụng rất nhiều đồng hồ, vì vậy câu trả lời này chi tiết làm thế nào để tăng điều đó.
Seiyria

Câu trả lời:


1272

Chạy lệnh dưới đây để tránh ENOSPC:

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

Đối với Arch Linux, thêm dòng này vào /etc/sysctl.d/99-sysctl.conf:

fs.inotify.max_user_watches=524288

Sau đó thực hiện:

sysctl --system

Điều này cũng sẽ tiếp tục trên các lần khởi động lại. Chi tiết kỹ thuật nguồn


24
Đây là những gì nó làm. github.com/guard/listen/wiki/ cường
Agus Syahputra

2
Đây không phải là một con số ngẫu nhiên. Mỗi đồng hồ inotify được sử dụng chiếm tới 540 byte (hệ thống 32 bit) hoặc 1 kB (gấp đôi - trên 64 bit). Điều này đi ra khỏi bộ nhớ kernel, không thể tải được. Vì vậy, giả sử bạn đặt tối đa ở mức 524288 và tất cả đã được sử dụng (không thể thực hiện được), bạn sẽ sử dụng khoảng. 256 MB / 512 MB bộ nhớ kernel 32 bit / 64 bit.
Murali Krishna

Về mặt lý thuyết không có giá trị tối đa, miễn là bạn có đủ RAM. Trong thực tế, 524288 đã được các ứng dụng chính thức khuyến nghị và mọi người đã đặt nó ở mức 2 triệu, với việc sử dụng bộ nhớ đi kèm.
Murali Krishna

Điều này đã giúp tôi giải quyết vấn đề cũng liên kết này github.com/guard/listen/wiki/NH có tất cả các chi tiết. Cảm ơn
amitsin6h

Có ai khác thấy lạ rằng lỗi phát sinh chỉ đơn giản là ENOSPCkhông? Tại sao không có một mô tả ngay sau khi đầu ra như thế ENOSPC - no space on drivenào? Chắc chắn, mã lỗi có ý nghĩa khi bạn biết ý nghĩa của nó ( E rror NO SP a C e), nhưng tại sao không chỉ cung cấp cho người dùng thông tin đó trước?
Shadoninja

73

ENOSPC có nghĩa là không có không gian trên ổ đĩa.

Có lẽ /tmplà đầy đủ? Bạn có thể định cấu hình npmđể sử dụng thư mục tạm thời khác bằng cách cài đặt npm config set tmp /path/to/some/other/dirhoặc có thể xóa mọi thứ khỏi /tmpthư mục.

Nguồn: npm 1.1,21 không thể ghi, ENOSPC trong repo của npm trong github.

Lưu ý tôi đã giải quyết vấn đề của mình theo cách được mô tả trong nguồn trên. Tuy nhiên, hãy xem câu trả lời của Murali Krishna dưới đây, toàn diện hơn.


Tôi đã làm sạch thư mục / tmp và thay đổi thư mục tạm thời npm, nhưng có cùng một vấn đề. npm config get tmphiển thị / vol / triển khai / tmp
Giffo

bạn có thể hiển thị ra đặt một lần nữa? đầu ra mà bạn nhận được Sau khi thay đổi dir
Blu

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

1
bạn có người nghe lỗi không? nếu không hơn là viết một và sau đó kiểm tra kết quả đầu ra
Blu

72
sai, lỗi này thường xảy ra trong không gian làm việc của nhà phát triển khi xem tệp (thông qua grunt / gulp). Điều này phải được thực hiện với giới hạn unix về số lượng tệp mà một quá trình có thể xem (đồng hồ gốc). Câu trả lời khác (echo fs.inotify.max_user_watches = 524288) là giải pháp trong những trường hợp đó.
Cancerbero


20

Một cách đơn giản để giải quyết vấn đề của tôi là:

npm cache clear

npm hoặc một quá trình được kiểm soát bởi nó đang xem quá nhiều tệp. Cập nhật max_user_watches trên nút xây dựng có thể sửa nó mãi mãi. Đối với debian đặt như sau trên thiết bị đầu cuối:

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

Nếu bạn muốn biết làm thế nào Tăng số lượng người theo dõi inotify chỉ nhấp vào liên kết.


2
Tôi gặp vấn đề với việc forever,sửa nó khi tôi tạo tệp .foreverignorevà thêm vào thư mục chúngnode_modules.
Vilintritenmert

7

Khởi động lại máy đã giải quyết vấn đề cho tôi. Lần đầu tiên tôi thử lau /tmp/nhưng nút vẫn phàn nàn.


Vấn đề đã trở lại sau khi khởi động lại. Làm dedupegiúp.
Parnab Sanyal

4

Trên Linux, đây có thể là một giới hạn về số lượng đồng hồ tệp.

Máy chủ phát triển sử dụng inotify để thực hiện tải lại nóng. API inotify cho phép máy chủ phát triển xem các tệp và được thông báo khi chúng thay đổi.

Giới hạn xem tệp inotify mặc định thay đổi từ phân phối đến phân phối (8192 trên Fedora). Nhu cầu của máy chủ phát triển thường vượt quá giới hạn này.

Cách tiếp cận tốt nhất là thử tạm thời tăng giới hạn xem tệp, sau đó thực hiện thay đổi cấu hình vĩnh viễn nếu bạn hài lòng với nó. Tuy nhiên, lưu ý rằng điều này thay đổi toàn bộ cấu hình hệ thống của bạn, không chỉ nút.

Để xem giới hạn hiện tại của bạn:

sysctl fs.inotify.max_user_watches

Để tạm thời đặt giới hạn mới:

# 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

Để đặt giới hạn vĩnh viễn:

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

Cảm ơn bạn điều này đã giải quyết vấn đề của tôi.
Josh

cảm ơn!! giải pháp tạm thời của bạn hoạt động!
JRichardsz

3

Trên Ubuntu 18.04, tôi đã thử một mẹo mà tôi đã sử dụng để kích hoạt lại tệp đang xem bằng ionic / nút và nó cũng hoạt động ở đây. Điều này có thể hữu ích cho những người không có quyền truy cập vào tệp conf hệ thống.

CHOKIDAR_USEPOLLING=1 npm start

2

Tôi đã giải quyết vấn đề của mình bằng cách tiêu diệt tất cả các quy trình kiểm soát theo dõi (bạn có thể thử nếu bạn sử dụng GDM, rõ ràng không phải trường hợp của bạn nếu tập lệnh đang chạy trên máy chủ)

tracker-control -r

Thiết lập của tôi: Arch với Gnome 3


1
Quên chỉ định nó, vâng, tôi đã ở trong tình huống tương tự: Arch + Gnome
Denys Vitali

2

Nếu giá trị /tmpgắn kết của bạn trên hệ thống tệp linux được gắn dưới dạng tràn (thường có kích thước 1MB), thì điều này có thể là do bạn không chỉ định /tmplà phân vùng riêng và hệ thống tệp gốc của bạn được lấp đầy và /tmpđược xem là dự phòng.

Để khắc phục điều này sau khi bạn đã xóa không gian, chỉ cần ngắt kết nối dự phòng và nó sẽ hiển thị lại tại điểm ban đầu:

sudo umount overflow

2

Nếu bạn gặp lỗi này trong khi cố gắng chạy ember serverlệnh xin vui lòng rm -rf tmpthư mục. Sau đó chạy ember slại. Nó đã giúp đỡ tôi.


2

Tôi đã có cùng một lỗi. Trong khi tôi chạy ứng dụng Reactjs. Những gì tôi làm chỉ là loại bỏ thư mục node_modules và gõ và cài đặt lại node_modules. Điều này loại bỏ lỗi.


Điều này thực sự hoạt động, tại sao nó bị hạ cấp - đó là câu hỏi. Nhưng nó giải quyết vấn đề, vậy bạn cần gì nữa?
AlexNikonov

1
Không biết, có thể mọi người có vấn đề cá nhân với tôi. hahaha
Ghayyas Mubashir

1

Đối với tôi, tôi đã đạt đến số lượng tệp tối đa mà người dùng có thể sở hữu

Kiểm tra số của bạn với quota -svà số đó trong tệp không quá gần với hạn ngạch


1

Điều này nghe có vẻ rất kỳ quặc, nhưng đúng vậy, một hệ thống khởi động lại hoặc killall nodegiải quyết vấn đề cho tôi.


-15

Trong trường hợp của tôi, trên linux, sudoing đã khắc phục vấn đề.

Thí dụ:

sudo gulp dev

5
Điều này nguy hiểm! Nó có thể đã thành công vì một tỷ lệ không gian đĩa nhất định được dành cho root, điều này không giải quyết được vấn đề cốt lõi - không có chỗ trống như người dùng không có đặc quyền (tại vị trí đích).
Liam Dawson

Sử dụng sudo là một cách tuyệt vời để làm cho mọi thứ xảy ra, nhưng hầu hết mọi người bỏ qua việc hiểu mọi thứ xảy ra khi sudo được sử dụng. Riêng với các mô đun npm và npm, sử dụng sudo có thể dẫn đến những thứ được thực hiện bởi root mà người dùng không muốn được thực hiện bằng root, chẳng hạn như tạo tệp hoặc sử dụng các cổng được bảo vệ. Về cơ bản, lời khuyên "sử dụng sudo" rơi thẳng trên mặt của nó (có lẽ sau khi vấp ngã và nhìn chằm chằm vào mặt trời một lúc) trong đó có liên quan đến nvm / npm / nút.
bschlueter
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.