Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

در خصوص خطای "too many open files" و پارامتر nofile #10

Open
NabiKAZ opened this issue May 5, 2023 · 1 comment
Open

Comments

@NabiKAZ
Copy link

NabiKAZ commented May 5, 2023

سلام،

در اینجا:
https://github.com/rahgozar94725/freedom/blob/main/domestic-server/server-setup.md#%D8%A8%D9%87%DB%8C%D9%86%D9%87%D8%B3%D8%A7%D8%B2%DB%8C-%D8%B3%D8%B1%D9%88%D8%B1
دیدم صحبت از تنظیم nofile کردید.

من شاید چند هفته با این مشکل درگیر بودم که گفتم تجربم رو باهاتون به اشتراک بگذارم.

من با CentOS 7.9 کار میکنم. وقتی تعداد کاربرام زیاد میشد، اتصالات کلاینت کاربر قطعی‌های زیادی پیدا میکرد و در سمت لاگ x-ui که البته اشاره به xray داره مرتب خطاهای "too many open files" ظاهر میشد.

بعد از تحقیق زیاد و تست کردن راه‌حل‌های مختلف مشکل رو در تنظیم همین پارامتر nofile دیدم.

فقط برای اصلاحش روش تنظیم در فایل /etc/security/limits.conf که شما گذاشتید و منم در زیر دوباره میزارم، کافی نیست(شاید حتی در مواردی بی‌تأثیر باشه) ولی به هر حال بی ضرر هست انجامش:

echo '* soft nofile 1048576' >> /etc/security/limits.conf
echo '* hard nofile 1048576' >> /etc/security/limits.conf
echo 'ulimit -SHn 1048576' >> /etc/bashrc
echo 'fs.file-max = 1048576' >> /etc/sysctl.conf
sysctl -p
sysctl --system

برای تست عدم تاثیر پذیریش هم با اجرای این دستور میشد چک کرد که پروسه مربوط به فایل xray-linux-amd64 مقدار درست رو نگرفته:

cat /proc/`pidof xray-linux-amd64`/limits

در نهایت به این مقاله رسیدم:
https://woshub.com/too-many-open-files-error-linux/
In Linux, you can configure max open files limits at several levels:
OS kernel
Service
User
ظاهراً تغییر این پارامتر امنیتی در سه سطح کرنل، سرویس و یوزر صورت میگیره.

دستورات قبلی در سطح کرنل و یوزر عمل میکردند. که حتی اگر xray رو تحت خط فرمان دستی اجرا میکردیم، nofile روی پروسه‌ی مربوطه تأثیرشو گذاشته بود و اوکی بود.
اما مشکل وقتی بود که ما در پنل x-ui فایل xray رو در سطح سرویس اجرا میکنیم.

برای اینکه سرویس هم تأثیر خودشو بگیره در فایل سرویس x-ui:

/etc/systemd/system/x-ui.service

بعد از [Service] این دستورات رو میزنیم:

Restart=on-failure
RestartSec=30s
RestartPreventExitStatus=23
LimitNPROC=100000
LimitNOFILE=1048576

(شاید تنها دو خط آخر مربوط به موضوعه و کافی باشه، سایر دستورات رو جایی دیدم که خیلی کاربردشون رو بررسی نکردم و فکر کردم مفیدن و توی داکیومنتم بودن دیگه گذاشتم باشن)

و بعدم ریستارت سرویس‌ها:

systemctl daemon-reload
systemctl restart x-ui

درنهایت هم چک میکنیم:

cat /proc/`pidof xray-linux-amd64`/limits

Max processes             100000               100000               processes
Max open files            1048576              1048576              files

در ضمن شما در مستندات از عدد 51200 استفاده کرده بودید که کمه و من در نمونه‌های بالام از ماکزیمم مقدار 1048576 استفاده کردم.

اینطوری بود که مشکل من حل شد، گفتم به اشتراک بگذارم شاید خواستید توی ریپو اضافه کنید(کنم).

تشکر
نبی

@rahgozar94725
Copy link
Owner

خیلی ممنون از توضیح شما. ما از داکر استفاده میکنیم و این مشکلی که شما فرمودید توی روش ما اتفاق نمیوفته

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants