Lỗi React Native: ENOSPC: Đã đạt đến giới hạn hệ thống cho số trình xem tệp


130

Tôi đã thiết lập một ứng dụng gốc phản ứng trống mới.

Sau khi cài đặt một số mô-đun nút, tôi gặp lỗi này.

Running application on PGN518.
internal/fs/watchers.js:173
   throw error;
   ^

Error: ENOSPC: System limit for number of file watchers reached, watch '/home/badis/Desktop/react-native/albums/node_modules/.staging'
   at FSWatcher.start (internal/fs/watchers.js:165:26)
   at Object.watch (fs.js:1253:11)
   at NodeWatcher.watchdir (/home/badis/Desktop/react-native/albums/node modules/sane/src/node watcher. js:175:20)
   at NodeWatcher.<anonymous> (/home/badis/Desktop/react-native/albums/node modules/sane/src/node watcher. js:310:16)
   at /home/badis/Desktop/react-native/albums/node modules/graceful-fs/polyfills.js:285:20
   at FSReqWrap.oncomplete (fs.js:154:5)

Tôi biết nó liên quan đến việc không có đủ dung lượng cho người canh gác để xem tất cả các thay đổi của tệp.

Tôi muốn biết cách tốt nhất để thực hiện ở đây là gì?

Tôi có nên bỏ qua node_modulesthư mục bằng cách thêm nó vào .watchmanconfigkhông?


21
KHÔNG BAO GIỜ đăng hình ảnh về mã, lỗi hoặc đầu ra! stackoverflow.com/help/how-to-ask
Rob

Bạn đã cân nhắc thêm một số mã vào danh sách backlist metro.config.js chưa? Điều này sẽ làm giảm khối lượng quét: stackoverflow.com/questions/41813211/…
deepelement

Câu trả lời:


224

Linux sử dụng gói inotify để quan sát các sự kiện của hệ thống tệp, các tệp hoặc thư mục riêng lẻ.

Vì React / Angular tải lại nóng và biên dịch lại các tệp khi lưu nên nó cần theo dõi tất cả các tệp của dự án. Tăng giới hạn xem thông báo sẽ ẩn các thông báo cảnh báo.

Bạn có thể thử chỉnh sửa

# insert the new value into the system config
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p

# check that the new value was applied
cat /proc/sys/fs/inotify/max_user_watches

# config variable name (not runnable)
fs.inotify.max_user_watches=524288

36
Điều này không giải thích vấn đề là gì, giải pháp là gì hoặc cách giải pháp khắc phục sự cố.
Native Coder

2
wow, tôi gặp phải vấn đề tương tự như đã viết ở trên, nhưng giải pháp này 100% đã giải quyết được nó. cảm ơn bạn
akolliy

3
Làm thế nào để chúng tôi loại bỏ những người theo dõi thay vì cho phép nhiều hơn?
Jonathan

2
Hoạt động nhưng nếu tôi đọc đúng điều này, nó sẽ tăng giới hạn. Thay vào đó, tôi có thể đóng những người theo dõi đã mở không?
zozo

1
@NativeCoder liệu phiên bản mới có giải quyết được vấn đề đó không?
zardilior

150

Ý nghĩa của lỗi này là số lượng tệp được hệ thống giám sát đã đạt đến giới hạn !!

Kết quả: Lệnh thực hiện không thành công! Hoặc đưa ra cảnh báo (chẳng hạn như thực hiện một VSCode khởi động phản ứng gốc)

Giải pháp:

Sửa đổi số lượng tệp giám sát hệ thống

Ubuntu

sudo gedit /etc/sysctl.conf

Thêm một dòng ở dưới cùng

fs.inotify.max_user_watches=524288

Sau đó lưu và thoát!

sudo sysctl -p

để kiểm tra nó

Sau đó, nó được giải quyết!


cảm ơn, điều này dễ dàng hơn cho những người có máy tính để bàn
tgkprog

Này, điều này đã giải quyết trong trường hợp của tôi. Cũng được chia sẻ trên bài đăng của tôi. Cảm ơn bạn
Rashid Khan

56

Bạn có thể khắc phục nó, đó là việc tăng lượng người theo dõi inotify.

Nếu bạn không quan tâm đến các chi tiết kỹ thuật và chỉ muốn Nghe hoạt động:

  • Nếu bạn đang chạy Debian, RedHat hoặc một bản phân phối Linux tương tự khác, hãy chạy phần sau trong một 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 đang chạy ArchLinux, hãy chạy lệnh sau để thay thế

    $ echo fs.inotify.max_user_watches=524288 | sudo tee /etc/sysctl.d/40-max-user-watches.conf && sudo sysctl --system

Sau đó, dán nó vào thiết bị đầu cuối của bạn và nhấn enter để chạy nó.


Các chi tiết kỹ thuật

Nghe sử dụng inotify theo mặc định trên Linux để theo dõi các thư mục để biết các thay đổi. Không có gì lạ khi gặp phải giới hạn hệ thống về số lượng tệp bạn có thể theo dõi. Ví dụ: giới hạn inotify của Ubuntu Lucid (64bit) được đặt thành 8192.

Bạn có thể nhận được giới hạn xem tệp inotify hiện tại của mình bằng cách thực hiện:

$ cat /proc/sys/fs/inotify/max_user_watches

Khi giới hạn này không đủ để giám sát tất cả các tệp bên trong một thư mục, thì giới hạn này phải được tăng lên để Nghe hoạt động bình thường.

Bạn có thể đặt giới hạn mới tạm thời với:

$ sudo sysctl fs.inotify.max_user_watches=524288
$ sudo sysctl -p

Nếu bạn muốn đặt giới hạn của mình là vĩnh viễn, hãy sử dụng:

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

Bạn cũng có thể cần chú ý đến các giá trị của max_queued_eventsmax_user_instancesnếu việc lắng nghe tiếp tục phàn nàn.


2
Wow, cảm ơn bạn rất nhiều, điều này đã giải quyết được vấn đề của tôi đối với một lỗi tương tự với React JS vì dự án của tôi lớn hơn nhưng tôi không thể hiểu được nội dung và lỗi. Đó là một câu trả lời thích hợp, có một ngày tốt đẹp
Pierre Chevallier

4
một số người cần phải sửa chữa tốt hơn cho điều này. Tôi không cần phải làm điều gì đó như thế này khi bắt đầu một dự án mới với một bàn tay đầy phụ thuộc.
Patrick W. McMahon

Cảm ơn bạn đã trả lời chi tiết của bạn! Nó đã giúp tôi rất nhiều. Tôi đang phát triển React Native, thực sự RN cli đòi hỏi nhiều giá trị hơn của nó. Do đó, tôi thay đổi nó bằng các lệnh trên thành công. Tôi chỉ tự hỏi nếu giá trị cao hơn của nó có thể ảnh hưởng đến hiệu suất và sử dụng bộ nhớ theo cách xấu?
moondaddi

8

xóa mô-đun phản ứng

rm -r node_modules

yarn or npm install

yarn start or npm start

nếu lỗi xảy ra, hãy sử dụng lại phương pháp này


Tại sao điều này hoạt động? Nếu nó làm giảm số lượng tệp đang được xem, không cài đặt lại các phụ thuộc cần thiết sẽ thêm các tệp trở lại?
icedwater

2
@icedwater Xóa node_modules khiến React tạo một phiên bản inotify mới mà không có đồng hồ nào trên đó. Có thể có một lỗ hổng trong React khiến các phiên bản inotify bị lấp đầy, đó là lý do tại sao lỗi xuất hiện ngay từ đầu.
Quăng tài khoản

7

Từ tài liệu chính thức :

"Visual Studio Code không thể theo dõi các thay đổi tệp trong không gian làm việc lớn này" (lỗi ENOSPC)

Khi bạn thấy thông báo này, nó cho biết rằng trình xem tệp VS Code sắp hết xử lý vì không gian làm việc lớn và chứa nhiều tệp. Giới hạn hiện tại có thể được xem bằng cách chạy:

cat /proc/sys/fs/inotify/max_user_watches

Có thể tăng giới hạn lên tối đa bằng cách chỉnh sửa

/etc/sysctl.conf

và thêm dòng này vào cuối tệp:

fs.inotify.max_user_watches = 524288

Giá trị mới sau đó có thể được tải vào bằng cách chạy

sudo sysctl -p

Lưu ý rằng Arch Linux hoạt động hơi khác một chút, hãy xem mục Tăng số lượng người theo dõi thông báo để biết chi tiết.

Mặc dù 524.288 là số tệp tối đa có thể xem được, nhưng nếu bạn đang ở trong một môi trường đặc biệt hạn chế về bộ nhớ, bạn có thể muốn giảm số lượng xuống. Mỗi tệp xem chiếm 540 byte (32-bit) hoặc ~ 1kB (64-bit), vì vậy giả sử rằng tất cả 524.288 đồng hồ được tiêu thụ, điều đó dẫn đến giới hạn trên khoảng 256MB (32-bit) hoặc 512MB (64-bit ).

Một lựa chọn khác

là loại trừ các thư mục không gian làm việc cụ thể khỏi trình theo dõi tệp VS Code với cài đặt files.watcherExclude. Mặc định cho files.watcherExclude loại trừ node_modules và một số thư mục trong .git, nhưng bạn có thể thêm các thư mục khác mà bạn không muốn VS Code theo dõi.

"files.watcherExclude": {
    "**/.git/objects/**": true,
    "**/.git/subtree-cache/**": true,
    "**/node_modules/*/**": true
  }

7

Tôi đã giải quyết vấn đề này bằng cách sử dụng sudo tức là

sudo yarn start

hoặc là

sudo npm start

5
Mặc dù các lệnh đó có thể giải quyết câu hỏi, bao gồm giải thích về cách thức và lý do tại sao điều này giải quyết vấn đề sẽ thực sự giúp cải thiện chất lượng bài đăng của bạn và có thể dẫn đến nhiều phiếu bầu hơn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho độc giả trong tương lai, không chỉ người hỏi bây giờ. Vui lòng chỉnh sửa câu trả lời của bạn để thêm giải thích và đưa ra dấu hiệu về những giới hạn và giả định áp dụng.
Brian

Đây là giải pháp đơn giản nhất cho đến nay khi thay đổi bất kỳ cấu hình nào nhưng như @Brian đã nói, một tài liệu tham khảo hoặc giải thích sẽ giúp ích một cách hiệu quả.
Genius

1
Đây là giải pháp tồi tệ nhất. sudokhông nhằm mục đích sử dụng như vậy và cũng có thể gây ra các vấn đề khác.
Igor Parra

2

Điều đó đã xảy ra với tôi với một ứng dụng nút mà tôi đang phát triển trên một bản phân phối dựa trên Debian. Đầu tiên, một lần khởi động lại đơn giản đã giải quyết được vấn đề này, nhưng nó lại xảy ra trên một ứng dụng khác.

Vì nó liên quan đến số lượng người theo dõi mà inotify sử dụng để theo dõi tệp và tìm kiếm các thay đổi trong thư mục, bạn phải đặt số cao hơn làm giới hạn:

Tôi đã có thể giải quyết nó từ câu trả lời được đăng ở đây (cảm ơn anh ấy!)

Vì vậy, tôi đã chạy:

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

Đọc thêm về những gì đang xảy ra tại https://github.com/guard/listen/wiki/Increasing-the-amount-of-inotify-watchers#the-technical-details

Hy vọng nó giúp!


Hoạt động tuyệt vời trên Manjaro!
Omar Dulaimi

1

Như đã được chỉ ra bởi @snishalaka, bạn có thể tăng số lượng người theo dõi thông báo.

Tuy nhiên, tôi nghĩ rằng con số mặc định là đủ cao và chỉ đạt được khi các quy trình không được dọn dẹp đúng cách. Do đó, tôi chỉ cần khởi động lại máy tính của mình theo đề xuất về vấn đề github liên quan và thông báo lỗi đã biến mất.


0

Tôi gặp sự cố này trên một bản phân phối linuxmint . Có vẻ như đã xảy ra khi có quá nhiều thư mục và thư mục con / tệp tôi đã thêm vào thư mục / public trong ứng dụng của mình. Tôi đã áp dụng bản sửa lỗi này và nó hoạt động tốt ...

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

thay đổi thư mục thành thư mục / etc: cd /etc

sau đó chạy cái này: sudo systcl -p

Bạn có thể phải đóng thiết bị đầu cuối của mình nhiều npm startlần để thiết bị hoạt động.

Nếu điều này không thành công, tôi khuyên bạn nên cài đặt các tập lệnh phản ứng trên toàn cầu và chạy ứng dụng của bạn trực tiếp với đó.

$ npm i -g --save react-scripts

sau đó thay vì npm startchạy react-scripts startđể chạy ứng dụng của bạn.



-1
  1. Trước hết, bạn có thể chạy mọi lúc với các đặc quyền root

    sudo npm bắt đầu

  2. Hoặc bạn có thể xóa thư mục node_modules và sử dụng npm installđể cài đặt lại

  3. hoặc bạn có thể nhận được giải pháp vĩnh viễn

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


-5

Tôi đã gặp vấn đề tương tự khi sử dụng thư viện wifinhưng khi tôi thay đổi mạng của mình, nó hoạt động hoàn hảo.

Thay đổi kết nối mạng của bạn


1
Đây có thể là một bình luận
Milan Desai
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.