পিএইচপি-তে কী কারণে "পুলের জন্য মেমরি বরাদ্দ করতে অক্ষম" হচ্ছেন?


133

আমি মাঝে মধ্যে একটি সার্ভারের মেমরির বরাদ্দ সীমাটির বিরুদ্ধে, বিশেষত ওয়ার্ডপ্রেসের মতো স্ফীতিত অ্যাপ্লিকেশন সহ ছুটে এসেছি, তবে "পুলের জন্য মেমরি বরাদ্দ করতে অক্ষম" এবং কোনও তথ্য খুঁজে বের করতে সমস্যায় পড়েনি।

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

উত্তর:


90

সম্ভবত এপিসি সম্পর্কিত।

এই সমস্যাযুক্ত লোকদের জন্য, দয়া করে আপনাকে .ini সেটিংস নির্দিষ্ট করুন। বিশেষত আপনার apc.mmap_file_mask সেটিং।

ফাইল-ব্যাক এমএম্যাপের জন্য এটি এমন কিছুতে সেট করা উচিত:

apc.mmap_file_mask=/tmp/apc.XXXXXX

সরাসরি / dev / শূন্য থেকে এমএম্যাপ করতে, ব্যবহার করুন:

apc.mmap_file_mask=/dev/zero

পসিক্স-অনুবর্তী শেয়ারড-মেমরি-ব্যাক এমএম্যাপের জন্য, ব্যবহার করুন:

apc.mmap_file_mask=/apc.shm.XXXXXX

ধন্যবাদ! ঠিক সেই লিঙ্কটিই আমি খুঁজছিলাম। সাহায্যের প্রশংসা করুন!
জোনাথন্যাটেক্স

2
আমি দেখেছি যে এই পরিবর্তনগুলি সমস্যার সমাধান করে না, যেমন সংযুক্ত থ্রেডে দেওয়া মন্তব্যগুলিও দলিল করে ...
জোনাথন ডে

3
এই এপিসি সেটিংটির জন্য আরও তথ্য: php.net/apc.configration#ini.apc.mmap-file-mask
mikeytown2

2
আমার ক্ষেত্রে ত্রুটি থেকে মুক্তি পাওয়ার জন্য আমাকে ফাইল-ব্যাক থেকে POSIX- কমপ্লায়েন্টে পরিবর্তন করতে হয়েছিল।
আটটিলা ফুলপ

4
এই উত্তরটি কীভাবে সমস্যার সমাধান করে তা বোঝার জন্য আমি ক্ষতিতে আছি। file_maskএই মানগুলির মধ্যে একটি না হলেও ত্রুটিটি ঘটবে ? আমার যদি এই মানগুলির মধ্যে একটি থাকে এবং আমি ত্রুটিটি পাচ্ছি, তবে আমার কী এটি অন্য একটিতে স্যুইচ করা দরকার? কোনটি?
জেফ

125

0 টি টিটিএল ব্যবহার করার অর্থ এপিসি মেমরির বাইরে চলে গেলে সমস্ত ক্যাশে ফ্লাশ করবে । ত্রুটিটি আর উপস্থিত হয় না তবে এটি এপিসিকে আরও কম দক্ষ করে তোলে। এটি কোনও ঝুঁকি, কোনও ঝামেলা নয়, "আমি আমার কাজটি করতে চাই না" সিদ্ধান্ত। এপিসি সেভাবে ব্যবহার করা বোঝায় না। আপনার পর্যাপ্ত একটি টিটিএল চয়ন করা উচিত যাতে সর্বাধিক অ্যাক্সেস হওয়া পৃষ্ঠাগুলির মেয়াদ শেষ না হয়। সর্বোপরি পর্যাপ্ত মেমরি দেওয়া তাই এপিসিকে ক্যাশে ফ্লাশ করার দরকার নেই।

টিটিএল কীভাবে ব্যবহৃত হয় তা বোঝার জন্য ম্যানুয়ালটি কেবল পড়ুন: http://www.php.net/manual/en/apc.configration.php#ini.apc.ttl

সমাধানটি হ'ল এপিসিতে বরাদ্দ হওয়া মেমরি। Apc.shm_size বাড়িয়ে এটি করুন।

যদি এপিসি ভাগ করা সেগমেন্ট মেমোরি ব্যবহার করতে সংকলিত হয় তবে আপনি আপনার অপারেটিং সিস্টেম দ্বারা সীমাবদ্ধ থাকবেন। প্রতিটি বিভাগের জন্য আপনার সিস্টেমের সীমা দেখতে এই কমান্ডটি টাইপ করুন:

sysctl -a | grep -E "shmall|shmmax"

আরও স্মৃতি মেটানোর জন্য আপনাকে apc.shm_setions প্যারামিটার দিয়ে বিভাগগুলির সংখ্যা বাড়াতে হবে।

যদি এপিসি এমএমএপ মেমরি ব্যবহার করে তবে আপনার কোনও সীমা নেই। মেমরির পরিমাণটি এখনও একই বিকল্প apc.shm_size দ্বারা সংজ্ঞায়িত করা হয়।

যদি সার্ভারে পর্যাপ্ত মেমরি না থাকে তবে কম ঘন ঘন অ্যাক্সেস করা পিএইচপি ফাইলগুলি ক্যাশে হওয়া থেকে রোধ করতে ফিল্টার বিকল্পটি ব্যবহার করুন।

তবে কখনও 0 টি টিটিএল ব্যবহার করবেন না।

C33s যেমন বলেছে, আপনার কনফিগারটি পরীক্ষা করতে apc.php ব্যবহার করুন। এপিসি প্যাকেজ থেকে কোনও ওয়েব ফোল্ডারে ফাইলটি অনুলিপি করুন এবং এতে ব্রাউজারটি করুন। আপনি যা দেখতে পেয়েছেন তা আসলে কীভাবে বরাদ্দ করা হয় এবং কীভাবে ব্যবহৃত হয় তা আপনি দেখতে পাবেন। গ্রাফগুলি অবশ্যই কয়েক ঘন্টা পরে স্থিতিশীল থাকতে হবে, যদি সেগুলি প্রতিটি রিফ্রেশে সম্পূর্ণরূপে পরিবর্তিত হয়, তবে এর অর্থ হল আপনার সেটআপটি ভুল (এপিসি সবকিছু ফ্লাশ করছে)। সুরক্ষা মার্জিন হিসাবে এপিসি প্রকৃতপক্ষে যা ব্যবহার করে তার চেয়ে 20% বেশি মেষ বরাদ্দ করুন এবং এটি নিয়মিত পরীক্ষা করুন।

কেবলমাত্র 32MB অনুমতি দেওয়ার ডিফল্টটি হাস্যকরভাবে কম। যখন সার্ভারগুলি 64MB ছিল এবং বেশিরভাগ স্ক্রিপ্টগুলি প্রতি পৃষ্ঠায় একটি পিএইচপি ফাইল ব্যবহার করছিল তখন পিএইচপি ডিজাইন করা হয়েছিল। আজকাল ম্যাজেন্টোর মতো সমাধানগুলির জন্য 10 কেও বেশি ফাইলের প্রয়োজন (এপিসিতে ~ 60Mb)। আপনার পর্যাপ্ত মেমরির অনুমতি দেওয়া উচিত তাই বেশিরভাগ পিএইচপি ফাইল সর্বদা ক্যাশে থাকে। এটি কোনও অপচয় নয়, ফাইল ক্যাশে সম্পর্কিত কাঁচা পিএইচপি রাখার চেয়ে র‌্যামে অপকোড রাখা আরও দক্ষ। আজকাল আমরা 24 গিগাবাইট মেমরির সাথে নিখুঁত ser 80 / মাসের জন্য মেমরির সার্ভারগুলি খুঁজে পেতে পারি, তাই বেশ কয়েকটি জিপি এপিসিতে মঞ্জুরি দিতে দ্বিধা করবেন না। আমি 5 গিগাবাইটের বাইরে 2 গিগাবাইট 5 মেগেন্টো স্টোর এবং 40 ডলার ওয়ার্ডপ্রেস হোস্টিং সার্ভারে রেখেছি, এপিসি 1.2 গিগাবাইট ব্যবহার করে। Magento ইনস্টলেশন জন্য 64MB গণনা করুন, কিছু প্লাগইন সহ একটি ওয়ার্ডপ্রেস জন্য 40MB M

এছাড়াও, যদি একই সার্ভারে আপনার ডেভেলপমেন্ট ওয়েবসাইট থাকে। তাদের ক্যাশে থেকে বাদ দিন।


2
এই! আমি ওয়ার্ডপ্রেস চালাচ্ছি এবং 32 এম যথেষ্ট ছিল না। আপ আপ 64 এম এবং এখন পরিষ্কার মধ্যে। Apc.php লোক পরীক্ষা করুন!
ডেভ ড্রাগার

ভাল উত্তর! +1 ধন্যবাদ
Kostanos

M৪ এম-তে বাড়ানোর জন্য আপনাকে apc.shm_size = 64 যোগ করতে হবে এবং apc.shm_size = 64M যোগ করতে হবে না (বেশিরভাগ উদাহরণটি আমি দেখেছি শেষে একটি এম ছিল) আমার apc সংস্করণে কাজ করেনি (v3.1.3p1)
প্যাট্রিক

1
আপনি ধরে নিচ্ছেন যে আপনার কাছে প্রচুর পরিমাণে ক্যাশেড ফাইল থাকবে যা টিটিএল-এর চেয়ে বেশি ক্যাশে রয়েছে। c33s একটি গুরুত্বপূর্ণ পয়েন্ট আছে। যদি সমস্ত কিছু সম্প্রতি অ্যাক্সেস করা হয় (আসুন ধরে নিই যে আপনার 70% ক্যাশে রয়েছে যা আপনার পছন্দ মতো সমস্ত সময় অ্যাক্সেস হয়ে যায় এবং একটি বড় স্পাইক রয়েছে যেখানে প্রচুর অতিরিক্ত দুর্লভ ফাইলগুলি একবারে যুক্ত হয়ে যায়), আপনি ত্রুটি পেতে চলেছেন টিটিএল সেকেন্ডের জন্য নিক্ষিপ্ত ক্যাশে পূর্ণ, এবং আপনি এপিসিকে বলেছিলেন যে এটি এন্ট্রিগুলি সাফ করা উচিত নয় যাতে এটি অভিযোগ করে। যদি আপনার 5 ঘন্টা টিটিএল থাকে তবে আপনি 5 ঘন্টা মূল্যমানের ত্রুটিগুলি শেষ করবেন না কারণ এইসব অপ্রত্যাশিত ফাইলগুলির মেয়াদ শেষ হবে।
ম্যাথু কলব

@ ম্যাথেজকলব: এপিসি যত স্মরণীয়তা রাখতে পারে তার চেয়ে বেশি ফাইলের ক্যাশিংয়ের অনুমতি দেওয়া উচিত নয়। ক্যাশে যেতে অবিচ্ছিন্নভাবে অ্যাক্সেস করা ফাইল রোধ করতে ফিল্টারগুলি ব্যবহার করুন।
বোকন

36

আমার জন্য সমাধান:

  • apc.ttl = 0
  • apc.shm_size = আপনি যা চান কিছু

সম্পাদনা শুরু করুন

সতর্ক বার্তা!

@ বোকান আমাকে ইঙ্গিত করেছেন যে আমার এখানে একটি সতর্কতা যুক্ত করা উচিত।

আপনার যদি 0 টি টি টিএল থাকে তবে এর অর্থ প্রতিটি ক্যাশেড আইটেমটি তাত্ক্ষণিকভাবে মুছে ফেলা যায়। সুতরাং আপনার যদি ছোট আকারের ক্যাশের আকার 2 এমবি এবং 0 টি টিটিএল থাকে তবে এটি এপিকে অকেজো করে দেয়, কারণ ক্যাশে থাকা ডেটা সর্বদা ওভাররাইট হয়ে যায়।

টিটিএল কমিয়ে নেওয়ার অর্থ কেবলমাত্র ক্যাশে পূর্ণ হতে পারে না, কেবল এমন আইটেম রয়েছে যা প্রতিস্থাপন করা যায় না।

সুতরাং আপনাকে টিটিএল এবং ক্যাশে আকারের মধ্যে একটি ভাল ভারসাম্য বেছে নিতে হবে।

আমার ক্ষেত্রে আমার 1 কেবি আকারের ক্যাশে ছিল তাই এটি আমার পক্ষে যথেষ্ট পরিমাণে বেশি ছিল।

সম্পাদনা শেষ

পিএইচপি 5.2.17 সহ সেন্টোস 5 এ একই সমস্যা ছিল এবং লক্ষ্য করা গেছে যে ক্যাশে অনেক পিএইচপি ফাইল থাকার সময় যদি ক্যাশের আকার ছোট হয় এবং ttl প্যারামিটারটি "হাই" থাকে (7200 এর মত) তবে ক্যাশে যথেষ্ট দ্রুত পূর্ণ হয় এবং এপিসি এমন কিছু খুঁজে পায় না যা এটি মুছে ফেলতে পারে কারণ ক্যাশে থাকা সমস্ত ফাইল এখনও টিটিএল-তে ফিট করে।

মেমরির আকার বাড়ানো কেবল একটি অংশ সমাধান, আপনি যদি এখনও ক্যাশে ভরে থাকেন এবং সমস্ত ফাইল টিটিটিএল এর মধ্যে থাকে তবে আপনি এই ত্রুটিটি চালিয়ে যান।

সুতরাং আমার সমাধানটি টিটিএল 0 তে সেট করা ছিল, সুতরাং এপিসি ক্যাশে পূরণ করে একটি এপিসি সম্ভাব্যতা নতুন ডেটার জন্য কিছু মেমরি সরিয়ে দেয়।

আশা করি এইটি কাজ করবে

সম্পাদনা করুন: আরও দেখুন: http://pecl.php.net/bugs/bug.php?id=16966

http://pecl.php.net/get/APC এক্সট্র্যাক্টটি ডাউনলোড করুন এবং apc.php চালান, সেখানে আপনার ক্যাশের ব্যবহার দেখতে কেমন লাগে তা একটি চমৎকার চিত্র রয়েছে


2
ধন্যবাদ, এই সাহায্য করেছে। আমি প্রতি সেকেন্ডে প্রায় এক ডজন "মেমরি বরাদ্দ করতে অক্ষম" পেয়েছিলাম। আমি আমার ক্যাশের আকার দ্বিগুণ করেছি (32 থেকে 64 এমবি) এবং টিটিএল 0 এ নামিয়েছি যা এই ত্রুটিগুলি পুরোপুরি সরিয়ে দিয়েছে।
নিকটাকুলার

1
এটি ছিল আমাদের সার্ভারগুলিতে স্থির।
জাস্টিন

1
এটি আমার জন্য সমস্যাটিও ঠিক করেছিল বলে মনে হয়েছিল।
anisoptera

1
ZWAMP ব্যবহার করে এবং এটিও কৌশলটি ভালভাবে সম্পন্ন করেছে বলে মনে হয়। ধন্যবাদ।
ওয়ার্নার সিডি

10
এটি কোনও সমাধান নয়! ত্রুটিটি অদৃশ্য হয়ে যায় তবে এপিসি প্রায় অক্ষম হয়ে যায়। প্রতিটি বারের স্মৃতি পূর্ণ হয়ে গেলে এটি সমস্ত ক্যাশে ফ্লাশ করবে। ব্রাইডউ আমাদের দেওয়া ম্যানুয়ালটি কেবল পড়ুন। php.net/manual/en/apc.configuration.php#ini.apc.ttl।
বোকান

7

আপনার সমস্যা কী তা বোঝার জন্য apc.php স্ক্রিপ্টটি চালানো আইএমও। এটি আমাদের ক্যাশে সঠিকভাবে আকার দিতে সহায়তা করেছে এবং মুহুর্তের জন্য, সমস্যার সমাধান হয়েছে বলে মনে হচ্ছে।


1
যেমন C33s বলেছেন: pecl.php.net/get/APC এক্সট্র্যাক্টটি ডাউনলোড করুন এবং apc.php চালান, সেখানে আপনার ক্যাশের ব্যবহার কেমন দেখাচ্ছে তা একটি সুন্দর চিত্র রয়েছে
বোকান ২

4

আমার মতো নবজাতকদের জন্য, এই সংস্থানগুলি সহায়তা করেছে:

উপরের সি 33 এস দ্বারা প্রস্তাবিত পরিবর্তনগুলি করার জন্য apc.ini ফাইলটি সন্ধান করা এবং প্রস্তাবিত পরিমাণ নির্ধারণ করা: http://www.untwistedvortex.com/optimizing-tuning-apc-alternate-php-cache/

Apc.ttl কী তা বোঝা: http://www.php.net/manual/en/apc.configration.php#ini.apc.ttl

Apc.shm_size কী তা বোঝা: http://www.php.net/manual/en/apc.configration.php#ini.apc.shm-size


ধন্যবাদ, আপনি সঠিক সমাধানটি নির্দেশ করেছেন। টিটিএল হ্রাস করা ঠিক এপিসি অক্ষম করার মতো like
বোকান

4

বোকান যেমন উল্লেখ করেছেন, উপলভ্য হলে আপনি মেমরিটি আপ করতে পারেন এবং টিটিএল থেকে 0 টির ক্ষেত্রে কীভাবে উত্পাদনশীল সেটিংয়ের পাল্টা সে ঠিক আছে he

দ্রষ্টব্য: এইভাবে আমি আমার বিশেষ সমস্যার জন্য এই ত্রুটিটি ঠিক করেছি। এটি একটি জেনেরিক সমস্যা যা বরাদ্দকৃত জিনিসগুলির কারণে ঘটতে পারে তাই কেবল ত্রুটিটি পাওয়া গেলে নীচের অনুসরণ করুন এবং আপনি মনে করেন এটি ডুপ্লিকেট পিএইচপি ফাইলগুলি এপিসিতে লোড হওয়ার কারণে ঘটে।

আমি যখন আমার পিএইচপি অ্যাপ্লিকেশনটির একটি নতুন সংস্করণ প্রকাশ করছিলাম তখন আমার সমস্যাটি ছিল। আমি আমার সমস্ত। Php ফাইলগুলি নতুন এপিসি দিয়ে প্রতিস্থাপন করে উভয় সংস্করণকে ক্যাশে লোড করব।

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

এপিসিস্ট্যাট নামে একটি অপশন রয়েছে যা এপিসিকে বলার জন্য একটি নির্দিষ্ট ফাইলের পরিবর্তন হয়েছে কিনা এবং যদি এটির বদল হয় তবে এটি সাধারণত উন্নয়নের জন্য ঠিক কারণ আপনি নিয়মিত পরিবর্তনের জন্য যাচ্ছেন তবে উত্পাদনের সময় এটি সাধারণত বন্ধ থাকে কারণ এটি আমার সাথে ছিল কেস - http://www.php.net/manual/en/apc.configration.php#ini.apc.stat

আপনি যদি পারফরম্যান্স হিট করে ঠিক থাকেন তবে এপিসিস্ট্যাট চালু করলে এই সমস্যাটি ঠিক হয়ে যাবে।

আমার সমস্যার জন্য আমি যে সমাধানটি নিয়ে এসেছি তা হ'ল প্রকল্পের সংস্করণটি পরিবর্তিত হয়েছে কিনা এবং তা ক্যাশে খালি করে পৃষ্ঠাটি পুনরায় লোড করুন কিনা তা পরীক্ষা করে দেখুন।

define('PROJECT_VERSION', '0.28'); 

if(apc_exists('MY_APP_VERSION') ){

    if(apc_fetch('MY_APP_VERSION') != PROJECT_VERSION){
        apc_clear_cache();
        apc_store ('MY_APP_VERSION', PROJECT_VERSION);
        header('Location: ' . 'http'.(empty($_SERVER['HTTPS'])?'':'s').'://'.$_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']);
        exit;  
    }

}else{
    apc_store ('MY_APP_VERSION', PROJECT_VERSION);
}

2

এটি আমাদের ছেলেদের জন্য কাজ করেছে (একই সার্ভারে ওয়ার্ডপ্রেস সাইটগুলি চালিয়ে যাচ্ছে)।

/Etc/php.d/apc.ini ফাইলে মেমরি সেটিংস পরিবর্তন করা হয়েছে। এটি 64M তে সেট করা হয়েছিল, তাই আমরা এটি দ্বিগুণ করে 128M এ রেখেছি।

apc.shm_size = 128M


1

ইন্টারনেটগুলি দেখার জন্য বিভিন্ন কারণ হতে পারে। আমার ক্ষেত্রে সমস্ত কিছুই ডিফল্ট রেখে ...

apc.shm_size = 64M

... আমি আগে যে অগণিত সতর্কতা পেয়েছিলাম তা সাফ করে দিয়েছিল।


1

ওপেনকার্ট ইনস্টলেশনটি অন্য একটি সার্ভারে সরানোর পরে আমি "পুলের জন্য মেমরি বরাদ্দ করতে অক্ষম" ত্রুটি পেয়েছি। আমি মেমরি_লিট বাড়ানোর চেষ্টাও করেছি।

অ্যাপাচি (অ্যাপাচি, www-ডেটা, ইত্যাদি) হিসাবে চালিত ব্যবহারকারীর লেখার অ্যাক্সেসের জন্য আমি ত্রুটি বার্তায় ফাইলটির অনুমতি পরিবর্তন করার পরে ত্রুটি বন্ধ হয়ে গেছে। সরাসরি / ইত্যাদি / গোষ্ঠী পরিবর্তন করার পরিবর্তে (বা 0777-এ ফাইলগুলি chmod-ing) পরিবর্তে আমি ব্যবহারকারী ব্যবহার করেছি:

usermod -a -G vhost-user-group apache-user

তারপরে পরিবর্তনটি কার্যকর হওয়ার জন্য আমাকে অ্যাপাচি পুনরায় চালু করতে হবে:

apachectl restart

অথবা

sudo /etc/init.d/httpd restart

অথবা আপনার সিস্টেম অ্যাপাচি পুনরায় চালু করতে যা কিছু ব্যবহার করে।

যদি সাইটটি শেয়ার্ড হোস্টিংয়ে থাকে, তবে আপনাকে অবশ্যই কোনও এফটিপি প্রোগ্রামের সাথে ফাইল অনুমতিগুলি পরিবর্তন করতে হবে, বা হোস্টিং সরবরাহকারীর সাথে যোগাযোগ করতে হবে?


1

এই সমস্যার সমাধানের জন্য পূর্ণসংখ্যা হিসাবে apc.shm_size এর মান নির্ধারণ করুন আপনার apc.ini ফাইলটি সন্ধান করুন (আমার সিস্টেমে apc.ini ফাইলের অবস্থান /etc/php5/conf.d/apc.ini) এবং সেট করুন: apc.shm_size = 1000


1

আমার সিস্টেমে আমাকে apc.shm_size = 64M /usr/local/etc/php.ini (ফ্রিবিএসডি 9.1) এর মধ্যে sertোকাতে হয়েছিল তখন আমি যখন এপিসিএফপি (আমি / ইউএসআর / লোকাল / শেয়ার / ডক / এপিসি থেকে অনুলিপি করেছি) দেখলাম /apc.php to / usr / local / www / apache24 / data) আমি দেখতে পেয়েছি যে ক্যাশের আকারটি 32M এর ডিফল্ট থেকে 64M তে বেড়েছে এবং আমি আর একটি বড় ক্যাশে পূর্ণ গণনা পাচ্ছি না was

তথ্যসূত্র: http://au1.php.net/manual/en/apc.configration.php এছাড়াও বোকনের মন্তব্য পড়েছিল, তারা খুব সহায়ক ছিল


0

আপনার ক্যাশেড ফাইলের আকার পর্যবেক্ষণ করুন (আপনি এপিসি প্যাকেল প্যাকেজ থেকে apc.php ব্যবহার করতে পারেন) এবং আপনার প্রয়োজন অনুসারে apc.shm_size বৃদ্ধি করুন।

এটি সমস্যার সমাধান করে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.