امروز اومدم با VS Code کار کنم ولی هرچی میزدم برنامه باز نمیشد از دیروز هم whatsdesk اجرا نمیشد! خب این از چالش های Ubuntu هستش و وقتی میخوای اخت بگیری با یک سیستم عامل بهتره همه قلق هاشو یاد بگیری.
مدتی بود VS Code بهم خطای “System limit for number of file watchers reached” رو میداد و برطرفش نکردم. تا اینکه امروز کلا Visual Studio Code اجرا نشد نشد و فراموش کردم خطایی که نمایش میداد چی بود! اول فکر میکردم بخاطر فولدر vendor نوتیف میداد اما با سرچ vs code is not runnig ubuntu از اینجا Cannot open Visual Studio Code این نتیجه رسیدم که برای مشاهده لاگ اجرای VS Code از دستور زیر میشه استفاده کرد:
code --verbose
که با اجرای اون به خطای زیر رسیدم:
با جستجوی متن خطا “System limit for number of file watchers reached” به صفحه React Native Error: ENOSPC: System limit for number of file watchers reached رسیدم. گویا این خطا ربطی به vs code نداره و بخاطر inotify watch هست. اول بیاین خطا رو درست کنیم بعد بقیه رو توضیح میدم. برای اینکه ببینید تنظیم فعلی سیستمتون برای دنبال کردن فایل ها چقدر هست این دستور رو بزنین:
cat /proc/sys/fs/inotify/max_user_watches
احتمالا عددی حدود ۸ هزار میده. خب وقتی شروع به نصب برنامه ها مثل whatsdesk (نسخه غیر رسمی whatsapp) یا vscode در اوبونتو میکنین این برنامه نیاز دارن بعضی فایل ها رو دنبال کنن اصطلاحا ترک کنن. اینکار توسط watch انجام میشه و محدودیت هایی براش وجود داره. برای رفع خطا کد زیر رو بزنین
echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
این کد به انتهای فایل /etc/sysctl.conf مقدار fs.inotify.max_user_watches=524288 رو اضافه میکنه.
همین! الان برنامه هایی که باز نمیشدن راحت باز میشن!
حالا بریم سراغ اینکه inotify watch چی هست؟
اول از همه باید بدونیم خود inotify چی هست. inotify از ترکیب inode notify تشکیل شده و یک زیر سیستم (subsystem) هسته لینوکسه که تغییرات فایل های سیستم رو مشاهده میکنه و از طریق api اونها رو به برنامه های سطح بالاتر اطلاع میده. watch هم این وسط فایل ها رو برای تغییرات دنبال میکنه و هر تغییری رو ارسال میکنه به inotify.