Apache stops responding but is running
موارد کوچکی است که موجب به وجود آمدن این اتفاق می شود :
دلایل ممکن :
- MaxClients روی مقدار بسیار کم را تنظیم شده است.
- اگر شما بیش از 800 ورودی VirtualHost (دامنه، زیر دامنه، SSL، و غیره) داشته باشید ، فایلهای ErrorLog ، فایلهای توصیفگر بیش از حدی را باز می کنند و آپاچی قادر به لاگ گیری خطاها نیست و ممکن است متوقف شود. این مقدار می تواند در هر باکس بسته به محدودیت و راه اندازی سیستم متفاوت باشد. (پایین / بالاتر)
راه حل ها :
- ویرایش /etc/httpd/conf/httpd.conf و MaxClients تا چیزی حدود 200 یا 300 افزایش دهید .
-
cd /usr/local/directadmin/data/templates cp virtual_host*.conf custom cd custom
تمام خطاهای ErrorLog را از 4 فایل virtual_host * .conf که در دایرکتوری سفارشی هستند ، حذف کنید .
perl -pi -e 's/Error/#Error/' virtual_host*.conf echo "action=rewrite&value=httpd" >> /usr/local/directadmin/data/task.queue
پس از چند دقیقه آپاچی باید به طور خودکار مجددا راه اندازی شود (ممکن است بازنویسی با بیش از 800 سایت انجام شود).
اگر به اندازه کافی برای کاهش حد مجاز نیست و مشکل همچنان ادامه دارد، سعی کنید کامنت هایی در نوشته های CustomLog درج کنید :
perl -pi -e 's/CustomLog/#CustomLog/' virtual_host*.conf
و فرمان echo بالا را برای بازنویسی فایل های httpd.conf تکرار کنید.
3.سایر اطلاعات احتمالی :
ویرایش /usr/include/bits/typesizes.h و /usr/include/linux/posix_types.h و تنظیم
#define __FD_SETSIZE 32768
و سپس با استفاده از customapache یا custombuild مجدد کامپایل کنید.
در FreeBSD ، به جای موارد قبلی /usr/include/sys/select.h یا /usr/include/sys/types.h را استفاده کنید .
سپس تغییرات زیر را اعمال کنید :
تغییر
#define FD_SETSIZE 1024U
به
#define FD_SETSIZE 32768U
سپس مجدد apache/php را کامپایل کنید .
4. /etc/sysctl.conf را ویرایش کنید و fs.file-max = 32768 را اضافه کنید .
سپس دستور زیر را اجرا کنید :
/sbin/sysctl -w fs.file-max=32768 /sbin/sysctl -w kern.maxfiles=32768 /sbin/sysctl -w kern.maxfilesperproc=32768
سپس apache/php را مجدد کامپایل کنید .
دیگر ورودی های احتمالی برای sysctl.conf :
kern.maxfiles = 32768
kern.maxfilesperproc = 32768
5. راه دیگری برای آزاد کردن FileDescriptors این است که ssl را در هر دامنه ای که نیازی به آن نیست غیر فعال کنید.
یک روش سریع برای چک کردن این است که تایپ کنید :
ls -la /home/*/domains/*/private_html/index.html
اسکن سریع لیست برای هر index.html است که انداز هاش بین 200-300 بایت نیست .
هر کدام که در آن محدوده نیست، ویرایش خواهد شد و کاربر احتمالا از ssl استفاده می کند، بنابراین از آن نام کاربری و دامنه استفاده می شود.در حال حاضر، راه سریع برای خاموش کردن SSL برای دامنه، دستور زیر است :
perl -pi -e ‘s/ssl=ON/ssl=OFF/’ /usr/local/directadmin/data/users/*/domains/*.conf
سپس ssl = ON را برای کاربرانی که به آن نیاز دارند، بازگردانید.
سپس دستور command = rewrite & value = httpd را همانطور که در مرحله 2 بالا ذکر شد تایپ کنید.
انجام چنین کاری باعث می شود که تعداد FD ها را 50٪ کاهش یابد.
6.اشکال Openssl. یا به روز رسانی openssl و یا تجدید آپاچی یا patch apache 2 .
ارور های مرتبط دیگر :
[error] System: Too many open files in system (errno: 23) host: isc_socket_create: not enough free resources socket.c:2117: REQUIRE(maxfd <= (int)1024) failed. host: isc_socket_create: not enough free resources
همچنین Exim ممکن است خطای زیر را ایجاد کند، Exim از طریق اسکریپت php صدا زده می شود :
R=lookuphost defer (-1): host lookup did not complete
کاهش تعداد دفعات استفاده از Apache Filedescriptors، در مواقعی که محدودیت توصیفگر فایل دلیل خطای آن باشد، کمک خواهد کرد.