আমার পিএইচপি-এফপিএম কনফিগারেশনে কী ভুল?


8

আমার একটি 64-বিট সার্ভার রয়েছে তবে কেবল 256 এমবি র‌্যাম রয়েছে। সুতরাং, আমি পিএইচপি সংযোগ করার জন্য দ্রুত সিজি সহ এনগিনেক্স সার্ভারে চলে এসেছি। আমার পিএইচপি 5.3.6 চলছে।

সমস্যাটি হ'ল প্রতি দুই বা তিন দিন পরে যখন আমি কোনও পিএইচপি পৃষ্ঠা অ্যাক্সেস করার চেষ্টা করি তবে আমি সার্ভারের অভ্যন্তরীণ ত্রুটি পাই। চারপাশের একমাত্র উপায় হ'ল পিএইচপি-এফএমপি ম্যানুয়ালি পুনরায় চালু করা। এর অর্থ আমার কিছু ভুল পরামিতি সেট করা উচিত ছিল যা এটিকে দম বন্ধ করে দিচ্ছে। নীচে আমি সম্পর্কিত কনফিগারেশন তালিকাভুক্ত করেছি।

/etc/php-fpm.conf: -

include=/etc/php-fpm.d/*.conf
log_level = error
;emergency_restart_threshold = 0
;emergency_restart_interval = 0
;process_control_timeout = 0

/etc/php-fpm.d/www.conf: -

[www]
pm = dynamic
pm.max_children = 10
pm.start_servers = 3
pm.min_spare_servers = 2
pm.max_spare_servers = 5
pm.max_requests = 500

/etc/nginx/php.conf: -

location ~ \.php {
        fastcgi_param  QUERY_STRING       $query_string;
        fastcgi_param  REQUEST_METHOD     $request_method;
        fastcgi_param  CONTENT_TYPE       $content_type;
        fastcgi_param  CONTENT_LENGTH     $content_length;

        fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
        fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;
        fastcgi_param  REQUEST_URI        $request_uri;
        fastcgi_param  DOCUMENT_URI       $document_uri;
        fastcgi_param  DOCUMENT_ROOT      $document_root;
        fastcgi_param  SERVER_PROTOCOL    $server_protocol;

        fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
        fastcgi_param  SERVER_SOFTWARE    nginx;

        fastcgi_param  REMOTE_ADDR        $remote_addr;
        fastcgi_param  REMOTE_PORT        $remote_port;
        fastcgi_param  SERVER_ADDR        $server_addr;
        fastcgi_param  SERVER_PORT        $server_port;
        fastcgi_param  SERVER_NAME        $server_name;

        fastcgi_pass unix:---some-location---;
}

আপডেট 1

এবং আমি চারটি nginx প্রক্রিয়া চলমান আছে। গড়ে প্রতিটি পিএইচপি-এফপিএম প্রক্রিয়াটি 35MB র্যাম নেয় (ভার্চুয়াল মেমরির আকার 320MB প্রতিটি)। আমার একটি মাইএসকিএল প্রক্রিয়াও চলছে।

আপডেট 2

আমি লগগুলি পেস্ট করতে ভুলে গেছি।

পিএইচপি-এফপিএম ত্রুটি লগ: -

WARNING: [pool www] seems busy (you may need to increase start_servers, or min/max_spare_servers), spawning 8 children, there are 1 idle, and 7 total children
WARNING: [pool www] server reached max_children setting (10), consider raising it
NOTICE: Terminating ...

পিএইচপি-এফপিএম www.error লগ: -

PHP Fatal error:  Allowed memory size of 33554432 bytes exhausted (tried to allocate 122880 bytes) in /home/webadmin/blog.applegrew.com/html/wordpress/wp-content/plugins/jetpack/class.jetpack-signature.php on line 137
PHP Fatal error:  Allowed memory size of 33554432 bytes exhausted (tried to allocate 122880 bytes) in /home/webadmin/blog.applegrew.com/html/wordpress/wp-content/plugins/jetpack/class.jetpack-signature.php on line 137
PHP Fatal error:  Allowed memory size of 33554432 bytes exhausted (tried to allocate 122880 bytes) in /home/webadmin/blog.applegrew.com/html/wordpress/wp-content/plugins/jetpack/class.jetpack-signature.php on line 137

উত্তর:


17

একটি অফ হ্যান্ড সুপারিশটি হ'ল আপনার সেট মানগুলি কমিয়ে দেওয়া - সম্ভবত সেগুলি অর্ধেক করে কেটে নিন।

আপনার কাছে: pm.max_children = 10 যদি আপনি 35 এমবি / প্রক্রিয়া = 350 এমবি বলেন; একটি 256MB বাক্সে যার অর্থ হয় প্রচুর অদলবদল হয় বা আপনি স্মৃতিশক্তি হারিয়ে ফেলেছেন - এটিও ভাল নয়।

আমি বলতে চাই যে অন্যান্য প্রক্রিয়াগুলির জন্য কমপক্ষে 100MB নিন, এমনকি নিরাপদ থাকতে 150MB এমনকি তার নম্বরটি 35MB দ্বারা ভাগ করে আপনার সর্বোচ্চ_ সন্তানদের পেতে পারেন। অন্যান্য সমস্ত সংখ্যা লাইনে রাখুন:

pm = dynamic
pm.max_children = 4
pm.start_servers = 1
pm.min_spare_servers = 1
pm.max_spare_servers = 2
pm.max_requests = 500

পিএইচপি-এফপিএম বন্ধ করুন এবং freeআপনার উপলব্ধ মেমরির ধারণা পেতে চালান - আপনার সর্বোচ্চ_মেয়েদের পেতে আপনার 35 এমবি দ্বারা ভাগ করুন।

মাইএসকিউএল কত মেমরি নেয় তার উপর নির্ভর করে আপনাকে ম্যাক্স_চিল্ড্রেন 3 এ নামাতে হতে পারে।

আমি দেখতে পেয়েছি যে পিএইচপি-এফপিএম প্রক্রিয়াগুলি প্রচুর মেমরি ভাগ করে নেয়, কতটা সত্যই ব্যবহৃত হয় তা নির্ধারণ করার জন্য একটি দ্রুত পরীক্ষা করুন। পিএইচপি-এফপিএম বন্ধ করুন এবং চালান free। পিএইচপি-এফপিএম শুরু করুন কয়েকটি সাধারণ পৃষ্ঠাগুলি দেখুন (যেহেতু লোড হওয়া পৃষ্ঠাগুলির উপর নির্ভর করে মেমরিটি বৃদ্ধি হয়), এবং ব্যবহৃত মোট স্মৃতি আবার পরীক্ষা করে দেখুন free- প্রক্রিয়া সংখ্যার দ্বারা পার্থক্যটি ভাগ করুন। এটি একটি নিখুঁত সিস্টেম নয়, তবে আমি এটি মোটামুটি নির্ভুল বলে মনে করি (কখনও কখনও উপরের ডেটা কলামটি খারাপ হয় না)।


আমি একটি স্টপ, freeএবং শুরু। আমি এই নিখরচায় স্মৃতিটিকে 35 দ্বারা ভাগ করে নিই max_children value। আমি শেষ প্যারাটির উদ্দেশ্য পাইনি।
অ্যাপলগ্রু

দেখে মনে হচ্ছে আমি পিএইচপি এর সর্বোচ্চ 2.3 টি প্রক্রিয়া সমর্থন করতে পারি support : P: P যাই হোক আমি এখন আছে max_children3.
AppleGrew

ক) 'শেষ প্যারা' এর উদ্দেশ্যটি ছিল পিএইচপি প্রক্রিয়া কতটুকু খরচ করে তার জন্য আরও সঠিক মান পাওয়া। আমি দেখতে পেয়েছি যে পিএস বা উপরের মান সর্বদা উপলভ্য মেমরির ড্রপের সাথে মেলে না। যদি উপলভ্য মেমরিটি খুঁজে পাওয়া যায়, কয়েকটি পিএইচপি প্রক্রিয়া চালান, এবং তারপরে উপলভ্য মেমরিটি পুনরুদ্ধার করুন (প্রক্রিয়াগুলি দ্বারা ব্যবহৃত মেমরিটির পরিবর্তে) আপনি প্রতিটি প্রক্রিয়া কত মেমরি ব্যবহার করেন তার জন্য একটি 'বিকল্প' (এবং সম্ভবত আরও ভাল) মান পেতে পারেন। খ) ইনভারব্রাস দ্বারা প্রস্তাবিত মেমরি_লিমিট প্যারামিটারটিও একটি ভাল পরামর্শ। সি) mysqltuner.pl স্ক্রিপ্টটি একবার দেখুন, এটি আপনার ডিবি কনফিগারেশনে সহায়তা করতে পারে।
সাইবারএক্স 86

@ সাইবারএক্স ৮86, আপনি কোন মূল্য freeবিবেচনা করবেন? '- / + বাফার / ক্যাশে' সারিটি থেকে একটি যা ডিস্ক ক্যাশে ব্যবহৃত হয়, তবে অ্যাপ্লিকেশনগুলির জন্য আসলে বিনামূল্যে?
রোমান নেওয়াজা

@ রোমাননওয়াজা - হ্যাঁ, আপনি অ্যাপ্লিকেশনটিতে উপলব্ধ মেমরিটি দেখতে চান, তাই আপনি '- / + বাফার / ক্যাশে' এর আওতায় 'ফ্রি' এর জন্য এন্ট্রিটি ব্যবহার করবেন।
সাইবারেক্স 86

6

আপনার পিএইচপি-এফএমপি সেটআপ ঠিক আছে বলে মনে হচ্ছে।

তবে আপনি যে সার্ভারটি চালাচ্ছেন তা কিছুটা সংস্থানীয়। পিএইচপি প্রক্রিয়াগুলি উপলব্ধ মেমরিটিকে ক্লান্ত করছে এমন লগগুলি থেকে এটি স্পষ্ট।

সাইবারএক্স 86 এর দ্বারা প্রদত্ত পরামর্শগুলিতে যুক্ত করা:

আপনি php.ini ফাইলটিতে মেমরি_লিট প্যারামিটার সম্পাদনা করার চেষ্টা করতে পারেন ( এখানে দেখুন ) (যদিও আমি নিশ্চিত না যে এটি আরও ভাল করবে)

অল্প পরিমাণে সিস্টেমের মেমরি দেওয়া, আমি মনে করি আপনার 32-বিট ওএসে স্যুইচ করার গুরুত্ব সহকারে বিবেচনা করা উচিত। একটি এক্স 64 ওএস ব্যবহার করা উপকারী হওয়ার চেয়ে আসলে আপনাকে কষ্ট দিচ্ছে।

আপনি যদি নিজের মাইএসকিএল ডাটাবেসে ইনোডিবি স্টোরেজটি ব্যবহার না করে থাকেন তবে আপনি নিজের মাই সিএনএফ-এ ইনোডিবি বন্ধ করার কথাও বিবেচনা করতে পারেন - এটি আরও 100 এমবি র‌্যাম সাশ্রয় করবে।

লোেন্ডবক্সে কম মেমরির কনফিগারেশনের জন্য সার্ভারগুলি কীভাবে অনুকূল করা যায় সে সম্পর্কে একটি দুর্দান্ত টিউটোরিয়াল রয়েছে।


আমার হোস্টটি আমার হোস্টিং সংস্থার সাথে আমাকে 32-বিট ওএস সরবরাহ করার জন্য যুক্তি দিয়ে চেষ্টা করার চেষ্টা করছে। পুরো সংস্থা জুড়ে মনে হচ্ছে এই সংস্থাগুলি কেবলমাত্র 64-বিট সরবরাহ করে। আমি কেবল একটি সংস্থা পেয়েছি যা 32-বিট ওএস সরবরাহ করে তবে সেগুলি অনেক বেশি ব্যয়বহুল।
অ্যাপলগ্রু

3

পিএইচপি দ্বারা গৃহীত স্মৃতিটি সন্ধান করার জন্য খুব সহজ একটি আদেশ:

ps --no-headers -o "rss,cmd" -C php5-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'

তারপরে আপনি পিএইচপিতে উত্সর্গীকৃত র‌্যামটি ভাগ করে নিন এবং আপনার সর্বোচ্চ_ শিশুদের মান আছে!

এছাড়াও, আপনি ম্যানুয়ালি পর্যবেক্ষণ করতে পারেন (আপনার অবশ্যই শেষ পয়েন্ট পিএইচপি-স্থিতি সেটআপ করতে হবে) বা নাগিওসের সাথে।


awk: fatal: division by zero attempted
সামায়ো

1
মানে আপনার কোনও পিএইচপি 5-এফপিএম প্রক্রিয়া নেই .... আপনার নিজের ফিট করার জন্য আপনার প্রক্রিয়াটির নাম "পিএইচপি 5-এফপিএম" পরিবর্তন করতে হবে।
টমাস ডেকাউস

আমি এই কমান্ডটি ps --no-headers -o "rss,cmd" | grep php5-fpm | awk '{ sum+=$1 } END { printf ("%d%s\n", sum/NR/1024,"M") }'কোনওভাবে ব্যবহার করেছি - সি বিকল্পগুলি কাজ করে না।
ডায়েন্ড

কমান্ডটি আলাদাভাবে চালানোর চেষ্টা করুন (আমার অর্থ পিএস - না-শিরোনাম -o "আরএসএস, সেন্টিমিডি" প্রথম ইত্যাদি ...) এটি ডিবাগ করা সহজ হওয়া উচিত
টমাস ডেকাক্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.