Lỗi Nodemon: Đã đạt đến giới hạn hệ thống cho số người xem tệp


97

Tôi đang học graphqlvà sử dụng prisma-bindingcho các phép toán graphql. Tôi đang gặp phải nodemonlỗi này khi đang khởi động máy chủ nút của mình và nó cung cấp cho tôi đường dẫn của tệp giản đồ được tạo tự động bởi a graphql-cli. Bất cứ ai có thể cho tôi biết lỗi này là gì?

Lỗi:

Internal watch failed: ENOSPC: System limit for number of file watchers reached, watch '/media/rehan-sattar/Development/All projects/GrpahQl/graph-ql-course/graphql-prisma/src/generated

Đây là lỗi ulimit linux, hãy xem tại đây stackoverflow.com/questions/34588/…
Janith

Đã thử điều này! Lại gặp lỗi tương tự!
Rehan Sattar

2
Có thể bạn đang xem quá nhiều tệp. Có lẽ nó cũng bao gồm cả thư mục gật đầu?
Mikkel

node_modules là cần thiết vì tất cả các gói đều ở đó. Tôi đã cố gắng để giết các quá trình trước đó chạy trên cổng của máy chủ của tôi, nó làm việc cho tôi nhưng tôi không biết bao lâu nó sẽ mất bây giờ: D
Rehan Sattar

Câu trả lời:


222

Nếu bạn đang sử dụng Linux, dự án của bạn đang đạt đến giới hạn trình xem tệp của hệ thống

Để khắc phục điều này, trên thiết bị đầu cuối của bạn, hãy thử:

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

1
sử dụng sysctl --systemđể tải lại cho các hệ thống mới hơn
YLJ

5
có bất kỳ hàm ý nào khác mà chúng ta phải biết khi chúng ta làm điều này không? Tôi biết điều này sẽ giúp giải quyết vấn đề, tôi đã tự mình thử. Nhưng tôi hơi nghi ngờ về những tác dụng phụ có thể có mà bản sửa lỗi này có thể gây ra.
Aldee

@Aldee về ý nghĩa kỹ thuật của thay đổi này Tôi khuyên bạn nên kiểm tra wiki này: github.com/guard/listen/wiki/…
Isac Moura

Điều này cũng giải quyết rất nhiều vấn đề với các plugin npm. thx
The Bumpaster

2
Tôi không khuyên bạn nên tăng nó quá nhiều nếu bạn không chắc số lượng đang được sử dụng. Kiểm tra số được sử dụng với những điều sau đâyfind /proc/*/fd -user "$USER" -lname anon_inode:inotify -printf '%hinfo/%f\n' 2>/dev/null | xargs cat | grep -c '^inotify'
Nick Bull

22

Đôi khi tôi gặp sự cố này khi làm việc với VSCode trên máy Ubuntu của mình.

Trong trường hợp của tôi, cách giải quyết sau sẽ giúp:

dừng trình xem, đóng VScode, khởi động trình xem, mở lại VSCode.


Đúng rồi! Vì VSCode. Nó phải là chế độ tự động lưu.
Hùng Ng Vi

18

Bạn cần phải tăng inotify giới hạn quan sát cho người sử dụng của hệ thống. Bạn có thể thực hiện việc này từ dòng lệnh với:

sudo sysctl -w fs.inotify.max_user_watches=100000

Tuy nhiên, điều đó sẽ chỉ tồn tại cho đến khi bạn khởi động lại. Để đặt nó vĩnh viễn, hãy thêm một tệp có tên /etc/sysctl.d/10-user-watches.confvới nội dung sau:

fs.inotify.max_user_watches = 100000

Sau khi thực hiện thay đổi ở trên (hoặc bất kỳ thay đổi nào khác), bạn có thể tải lại cài đặt từ tất cả các tệp cấu hình sysctl trong /etcvới sudo sysctl -p.


Cảm ơn bạn rất nhiều! Đã làm cho tôi!! Nhưng tôi phải thêm tệp này vào đâu?
Rehan Sattar

@RehanSattar Tạo một tệp /etc/sysctl.d/10-user-watches.confvà đặt trong đó fs.inotify.max_user_watches = 100000.
cjs

Đặt điều này ở đây cho hoàn chỉnh echo fs.inotify.max_user_watches=100000 | sudo tee /etc/sysctl.d/10-user-watches.conf && sudo sysctl -p.
RedHatter

2
sử dụng sysctl --systemđể tải lại cho các hệ thống mới hơn
YLJ

3

Để kiểm tra các thay đổi, tôi đặt tạm thời tham số với giá trị 524288.

sysctl -w fs.inotify.max_user_watches=524288

sau đó tôi tiến hành xác thực:

npm run serve

Và vấn đề đã được giải quyết, để đặt nó vĩnh viễn, bạn nên thử thêm một dòng trong tệp "/etc/sysctl.conf" và sau đó khởi động lại dịch vụ sysctl:

cat /etc/sysctl.conf |tail -n 2
fs.inotify.max_user_watches=524288

sudo systemctl restart systemd-sysctl.service

Gợi ý thử nghiệm này tạm thời là vô giá. Cảm ơn bạn
intmarinoreturn .0

1

Có thể khó để biết số lượng người theo dõi tăng lên bao nhiêu. Vì vậy, đây là một tiện ích để tăng gấp đôi số lượng người theo dõi:

function get_inode_watcher_count() {
  find /proc/*/fd -user "$USER" -lname anon_inode:inotify -printf '%hinfo/%f\n' 2>/dev/null | 
  xargs cat | 
  grep -c '^inotify'
}

function set_inode_watchers() {
  sudo sysctl -w fs.inotify.max_user_watches="$1"
}

function double_inode_watchers() {
  watcher_count="$(get_inode_watcher_count)"
  set_inode_watchers "$((watcher_count * 2))"

  if test "$1" = "-p" || test "$1" = "--persist"; then
    echo "fs.inotify.max_user_watches = $((watcher_count * 2))" > /etc/sysctl.d/10-user-watches.conf
  fi
}

# Usage
double_inode_watchers
# to make the change persistent
double_inode_watchers --persist

-3

Trên Linux, tôi thực sự đã chạy với sudo. sudo npm start


5
Điều này thường sẽ hiệu quả vì root thường có giới hạn theo dõi inotify cao hơn nhiều so với người dùng thông thường, nhưng việc chạy mọi thứ dưới dạng root khi không cần thiết là một ý kiến rất tồi. Xem câu trả lời của tôi cho câu hỏi này để biết cách thay đổi giới hạn người dùng.
cjs
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.