এনগিনেক্স + পিএইচপি-এফপিএম - চলমান সময় প্রতিটি পিএইচপি-এফপিএম প্রক্রিয়া 70-100% সিপিইউ


8

আমার একটি পরিস্থিতি রয়েছে যেখানে নিম্নলিখিতটি সংঘটিত হচ্ছে:

  • আমরা ৮-কোর, ৮ জিবি র‌্যাম, ২.6 গিগাহার্টজ সহ লিনোডে আছি - এনজিনেক্স + পিএইচপি-এফপিএম ব্যবহার করে - আমরা সিপিইউ ব্যবহারের অত্যন্ত উচ্চতর গ্রাফ পাচ্ছি (যা আমরা এরকম খারাপ ভিপিএস প্রতিবেশী হতে চাই না) ...

  • আমাদের সাইটে সাইটে প্রায় 100 এরও কম ব্যবহারকারী রয়েছে - সুতরাং এই পরিস্থিতিটি অবিশ্বাস্যরকমভাবে বিব্রতও হয় - যে আমাদের সিপু ব্যবহার খুব বেশি।

  • আমরা খুব অজানা, সম্ভবত সিপিইউ নিবিড় পিএইচপি-ভিত্তিক, জ্ঞাত, ডকুমেন্টেড, ওয়ার্ডপ্রেস বা ড্রুপালের মতো ভাল নকশাকৃত অন্যান্য ফ্রেমওয়ার্কের পরিবর্তে প্রশ্নযুক্ত ভয়ঙ্কর ফ্রেমওয়ার্ক ব্যবহার করছি যেখানে ক্যাচিংয়ের পাশাপাশি প্রচুর ডকুমেন্টেশন রয়েছে (পাশাপাশি প্লাগইনস যে হ্যান্ডেল ক্যাচিং করে) একটি এনগিনেক্স + পিএইচপি_এফপিএম প্ল্যাটফর্মে পিএইচপি।

  • সুতরাং, আমাদের প্রায় 6 টি ওপেন পিএইচপি-এফপিএম প্রক্রিয়া রয়েছে যেগুলি যখন চালানো হয় তখন স্বতন্ত্রভাবে লার্জি (30+ এবং প্রায়শই 99% এর কাছাকাছি) পরিমাণ পরিমাণ সিপিইউ গ্রহণ করে - এবং কীভাবে এগুলিকে এত বেশি সিপিইউ ব্যবহার করা থেকে বিরত রাখা যায় সে সম্পর্কে আমি সামান্যতম ধারণাও পাইনি I । আমি বলতে পারি না যে কোন পিএইচপি স্ক্রিপ্টগুলি এই স্পাইকগুলি সৃষ্টি করছে কারণ সেগুলি সর্বদা ঘটে চলেছে ... সাধারণত কেবল 1 বা 2 চলমান থাকে - তবে যখন সমস্ত 6 রান হয় তখন আমরা সমস্ত 8 সিপাসকে সর্বাধিক করি।

  • আমার পুল.ডি / www.conf ফাইলে নিম্নলিখিত সেটিংস রয়েছে:

    pm = dynamic
    pm.max_children = 10
    pm.start_servers = 4
    pm.min_spare_servers = 2
    pm.max_spare_servers = 6
    
  • আমরা এটি সেটআপটি করেছি কারণ, যেভাবে আমি এটির ব্যাখ্যা করছি, আমাদের স্মৃতিটি আশ্চর্যজনক (এইচটিপিটি 472/7000 + এমবি ব্যবহৃত, কোনও অদলবদল ইত্যাদি দেখায়) এবং আমরা আরও অনেকগুলি প্রক্রিয়া পরিচালনা করতে পারি এবং অপেক্ষা করার লাইনটি ভেঙে ফেলতে পারি প্রক্রিয়াজাত করা হয়েছে - তবে দুর্ভাগ্যক্রমে, যেহেতু প্রতিটি প্রক্রিয়া চলমান অবস্থায় আমাদের সিপিইউতে খুব তীব্র হয় - আমরা ছাদ দিয়ে আমাদের সিপিইউ চালিত করি - সুতরাং আমরা পর্যাপ্ত প্রক্রিয়াগুলি পরিচালনা করতে পারি না।

  • প্রশ্ন - পিএইচপি-এফপিএম সিপিইউর প্রসেসটি হ্রাস করতে আমরা পৃথিবীতে কী করতে পারি যাতে আমরা পিএইচপি-এফপিএম-এর জন্য এই পুল কনফাইলে ফাইলের সেটিংস বাড়িয়ে দিতে পারি - এবং হ্যাঁ, /var/log/php5-fpm.log আমাদের বাচ্চাদের বাড়াতে এবং আমাদের ন্যূনতম / সর্বাধিক / সার্ভারগুলি শুরু / বাড়ানোর জন্য আমাদেরকে চিৎকার করছে। তবে এটি করা আমাদের বোঝার গড়টিকে পাগল করে তুলেছে আগের মতো। প্রয়োজনীয়ভাবে কোনও ক্যাশে ব্যবহার না করে আমরা কীভাবে এটি করতে পারি বা আমাদের বিকল্পগুলি কী?

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

  • আমি এই বিষয় নিয়ে কিছুদিন গবেষণা, গুগলিং ইত্যাদিতে গবেষণা করে কাটিয়েছি - এবং এটি কঠিন কারণ প্রত্যেকের পরিস্থিতি তাদের ব্যবস্থার পক্ষে এতটাই অনন্য - সমস্যাটি এমন একটি নির্দিষ্ট শোনেনি, সম্ভবত খারাপভাবে লেখা হয়েছে - কাঠামো তৈরি করছে - সমাধান খুঁজে পাওয়া শক্ত। আমরা কেবল এই ফ্রেমওয়ার্কটি কেবল এখনও স্ক্র্যাপ করতে পারি না - আমাকে কোনও ধরণের সমাধান খুঁজে পেতে হবে।


আপডেট: আমি পিএইচপি সেশনগুলি সংরক্ষণ করার জন্য ম্যাকচেস প্রয়োগ করেছি - কারণ কাঠামোটি ব্যবহারকারী সেশনগুলির উপর প্রচুর পরিমাণে নির্ভর করে এবং আমাদের সিস্টেমের প্রকৃতি হ'ল কর্মীরা প্রায়শই এক সাথে বেশ কয়েকটি ট্যাব ব্যবহার করেন - প্রতিটি সক্ষমতা / ব্যবহারকারীর ডেটা / ইত্যাদি নিশ্চিত করতে সেশনে ফিরে যাচ্ছেন each ... সুতরাং আমি এ থেকে পারফরম্যান্সে কিছুটা বাড়তি দেখার আশাবাদী - আপনি যদি এটি চান তাতে মন্তব্য করতে স্বাগতম - আমরা যখন আমাদের উচ্চতর পরিমানের শিখর সময়টি কাটিয়েছি তখন দেখব কীভাবে এটি হয় tomorrow


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

আপনি যখন ডাক্তারের কাছে যান, এবং তিনি আপনাকে কিছু মেডস নিতে বলেছিলেন - কারণ তিনি জানেন যে আপনি "সোডা পান করা এবং ফাস্টফুড খাওয়া বন্ধ করুন" বক্তব্যগুলি শুনতে পছন্দ করবেন না - ঠিক এই কারণেই আমার পক্ষে কোনও দুর্দান্ত উত্তর ছিল না - কারণ সত্য , কোনও সেটআপ বা দ্রুত ফিক্স সত্যিই প্রয়োগ করা হয়নি - কেবলমাত্র আমাদের দুঃখজনক সত্য যে আমাদের নাটকীয়ভাবে আমাদের ওয়েব অ্যাপ্লিকেশনটিকে পরিবর্তন করতে হবে।
amurrell

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

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

1
বার্নিশ এটির জন্য দুর্দান্ত - এটি মেমরিতে সার্ভার থেকে যা পেয়েছিল তার ক্যাশেড অনুলিপি সংরক্ষণ করে - সুতরাং বার্নিশ অনেক বেশি বোঝা নেয়। আমার বর্তমান নিয়োগকর্তা এনগিনেক্সে আছেন এবং আমরা বার্নিশ এবং মেমক্যাচ ব্যবহার করি। সৌভাগ্যক্রমে আমরা এখন যে কাঠামোতে রয়েছি তাতে পৃষ্ঠা ক্যাশে (আউটপুটযুক্ত পৃষ্ঠা ডেটা) নির্ধারণের নিজস্ব ক্যাশিং ব্যবস্থা রয়েছে। আমার শেষ কাজটিতে আমাকে এটিকে নিজের কাঠামোতে লিখতে হয়েছিল - এটি মজাদার ছিল না, তবে কাজ করেছিল p আমি ক্যাচিং প্রক্রিয়াটি লেখার সময় সম্পূর্ণভাবে আমাদের প্রকল্পটিকে হত্যা না করার একমাত্র সমাধান।
এ্যামুরেল

উত্তর:


6

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

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

আমি pm.max_requestsআপনার উত্পাদন পুলগুলির জন্য সংখ্যা হ্রাস করব । আমার মনে হয় ডিফল্ট 200 হয় I'd আমি 50 থেকে শুরু করব এবং এটি আপনাকে কোথায় নিয়ে যাবে তা দেখতে পাবে।

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

emergency_restart_threshold 3
emergency_restart_interval 1m
process_control_timeout 5s

এটার মানে কি? যদি 3 মিনিটের মধ্যে 3 পিএইচপি-এফপিএম চাইল্ড SIGSEGV বা SIGBUS (অর্থাৎ ক্র্যাশ) দিয়ে প্রস্থান করে তবে পিএইচপি-এফপিএম স্বয়ংক্রিয়ভাবে পুনরায় চালু হওয়ার কথা। শিশু প্রক্রিয়াজাতকরণের সংকেতগুলির প্রতিক্রিয়ার জন্য 5s অপেক্ষা করে।

আমি এখানে উল্লিখিত সমস্ত কনফিগার বিকল্পগুলির একটি সুন্দর ওভারভিউ, পাশাপাশি অন্যদের: http://myjeeva.com/php-fpm-configration-101.html

আশা করি এই টিপস আপনাকে সাহায্য করবে! টুইট এবং পর্যবেক্ষণ করতে ভুলবেন না, দুর্ভাগ্যক্রমে এই সমস্তটির জন্য থাম্বের নিয়ম বলে মনে হয় না, যেমন আপনি পর্যবেক্ষণ করেছেন, অনেকগুলি ভেরিয়েবল রয়েছে যা পিএইচপি এর আচরণ এবং স্থায়িত্বকে প্রভাবিত করে।

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

শুভকামনা!

Rouben


আমি আগামীকাল সর্বাধিক সীমাবদ্ধতার সীমাবদ্ধ করার চেষ্টা করতে যাচ্ছি - মনে হচ্ছে প্রতিটি প্রক্রিয়া আমরা সিপিইউ খাইতে চাই তাই এটি ভাল ধারণা হতে পারে। আমরা জরুরী পুনঃসূচনা প্রান্তিকাগুলি ব্যবহার করছি, তবে আমার সংখ্যা কিছুটা বেশি ছিল - আমি আপনার চেষ্টা করব এবং কীভাবে চলছে তা দেখব। আপনার পুরোপুরি জন্য ধন্যবাদ - খুব প্রশংসা। ক্যাশে সম্পর্কিত আপনার মতামত জানতে চান? আমি ভাবছি পিএইচপি ক্যাচিং ব্যবহার করার অর্থ ফ্রেমওয়ার্কটি এটি পরিচালনা করার জন্য তৈরি করতে হবে। আমি এই ধারণাটি থেকে বেশ নতুন।
amurrell

3

আপনি ওপকোড ক্যাচিং চালাচ্ছেন, তাই না?

এটি এপিসি হিসাবে ব্যবহৃত হত যা এখানে ছিল, তবে এটি বেশ কিছুদিনের জন্য একটি বগি টুকরো ছিল এবং এটি জেন্ড ওপকাচে দ্বারা পরিচালিত হয়ে গেছে , এটি এখন 5.5 এর পরে পিএইচপির অংশ, এবং 5.3 এর জন্য পিইসিএলে ব্যাকপোর্ট রয়েছে এবং 5.4।


আমি এই জেনড ওপচাচে আগ্রহী - আমরা 5.3 এ রয়েছি - আপনি যদি এই উত্তরটি প্রসারিত করতে পারতেন তবে আমি সত্যিই এটির প্রশংসা করব!
amurrell

আমাদের কাছে এক্সক্যাচি ছিল - তবে এখন আমি জেনড অপক্যাচের পক্ষে বেছে নিয়েছি এবং আমি এটি ইনস্টল করে দিয়েছি এবং নিশ্চিত করেছি যে এটি আপ এবং phpinfo () এ চলছে। ফলশ্রুতিগুলি আঙ্গুলগুলি অতিক্রম করার সাথে সাথে
এ্যামুরেল

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