"Zend_mm_heap দূষিত" এর অর্থ কী


126

হঠাৎ করেই আমার অ্যাপ্লিকেশনটি নিয়ে সমস্যা হচ্ছিল যা আমার আগে কখনও হয়নি। আমি অ্যাপাচি এর ত্রুটি লগটি যাচাই করার সিদ্ধান্ত নিয়েছি এবং আমি "zend_mm_heap দূষিত" বলে একটি ত্রুটি বার্তা পেয়েছি। এটার মানে কি.

ওএস: ফেডোরা কোর 8 অ্যাপাচি: 2.2.9 পিএইচপি: 5.2.6


2
আমি USE_ZEND_ALLOC=0ত্রুটি লগতে স্ট্যাকট্রেস পেয়েছিলাম এবং বাগটি /usr/sbin/httpd: corrupted double-linked listপেয়েছি, আমি খুঁজে পেয়েছি যে opcache.fast_shutdown=1আমার জন্য কাজ করা মন্তব্য করেছে।
স্পিডফায়ার

হ্যাঁ, এখানে একই। নিচের আরও অন্য প্রতিবেদনে দেখতে stackoverflow.com/a/35212026/35946
lkraav

লারাভেল ব্যবহার করে আমারও একই জিনিস ছিল। আমি একটি ক্লাসকে অন্য ক্লাসের কনস্ট্রাক্টরে ইনজেকশন দিয়েছি। আমি যে ক্লাসে ইনজেকশন দিচ্ছিলাম, এটি যে ক্লাসে ইনজেকশন করা হয়েছিল তা ইনজেকশন দিচ্ছিল, মূলত একটি বৃত্তাকার রেফারেন্স তৈরি করে যা হ্যাপের সমস্যার কারণ হয়ে দাঁড়ায়।
টমাস

1
দ্রুত এবং অস্থায়ী সমাধানগুলির জন্য অ্যাপাচি সার্ভারটি পুনঃসূচনা করুন :)
লিওপাথু

উত্তর:


52

অনেক পরীক্ষা এবং ত্রুটির পরে, আমি খুঁজে পেয়েছি যে আমি যদি output_bufferingphp.ini ফাইলে মান বাড়িয়ে তুলি তবে এই ত্রুটিটি চলে যায়


59
কী বাড়বে? কেন এই পরিবর্তনটি এই ত্রুটিটি দূরে সরিয়ে দেবে?
জেডিএস

2
@JDS এই উত্তর ব্যাখ্যা কি output_buffering সাহায্য করে এবং কেন বাড়ছে এটা সাহায্য করতে পারেন stackoverflow.com/a/2832179/704803
andrewtweber

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

@ জেডিএস কি ভুল কনফিগার্ড সেটিং?
কাইল ক্রোনিন

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

47

এটি কোনও সমস্যা নয় যা কনফিগারেশন বিকল্পগুলি পরিবর্তন করে অগত্যা সমাধানযোগ্য।

কনফিগারেশন বিকল্পগুলি পরিবর্তন করা কখনও কখনও ইতিবাচক প্রভাব ফেলতে পারে তবে এটি সহজেই জিনিসগুলিকে আরও খারাপ করতে পারে বা কিছুই করতে পারে না।

ত্রুটির প্রকৃতিটি হ'ল:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

int main(void) {
    void **mem = malloc(sizeof(char)*3);
    void *ptr;

    /* read past end */
    ptr = (char*) mem[5];   

    /* write past end */
    memcpy(mem[5], "whatever", sizeof("whatever"));

    /* free invalid pointer */
    free((void*) mem[3]);

    return 0;
}

উপরের কোডটি এর সাথে সংকলিত করা যেতে পারে:

gcc -g -o corrupt corrupt.c

ভ্যালগ্রাইন্ডের সাহায্যে কোডটি কার্যকর করা আপনি অনেকগুলি মেমরি ত্রুটি দেখতে পাবেন, সেগমেন্টেশন ফল্টে পরিণতি:

krakjoe@fiji:/usr/src/php-src$ valgrind ./corrupt
==9749== Memcheck, a memory error detector
==9749== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al.
==9749== Using Valgrind-3.10.1 and LibVEX; rerun with -h for copyright info
==9749== Command: ./corrupt
==9749== 
==9749== Invalid read of size 8
==9749==    at 0x4005F7: main (an.c:10)
==9749==  Address 0x51fc068 is 24 bytes after a block of size 16 in arena "client"
==9749== 
==9749== Invalid read of size 8
==9749==    at 0x400607: main (an.c:13)
==9749==  Address 0x51fc068 is 24 bytes after a block of size 16 in arena "client"
==9749== 
==9749== Invalid write of size 2
==9749==    at 0x4C2F7E3: memcpy@@GLIBC_2.14 (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==9749==    by 0x40061B: main (an.c:13)
==9749==  Address 0x50 is not stack'd, malloc'd or (recently) free'd
==9749== 
==9749== 
==9749== Process terminating with default action of signal 11 (SIGSEGV): dumping core
==9749==  Access not within mapped region at address 0x50
==9749==    at 0x4C2F7E3: memcpy@@GLIBC_2.14 (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
==9749==    by 0x40061B: main (an.c:13)
==9749==  If you believe this happened as a result of a stack
==9749==  overflow in your program's main thread (unlikely but
==9749==  possible), you can try to increase the size of the
==9749==  main thread stack using the --main-stacksize= flag.
==9749==  The main thread stack size used in this run was 8388608.
==9749== 
==9749== HEAP SUMMARY:
==9749==     in use at exit: 3 bytes in 1 blocks
==9749==   total heap usage: 1 allocs, 0 frees, 3 bytes allocated
==9749== 
==9749== LEAK SUMMARY:
==9749==    definitely lost: 0 bytes in 0 blocks
==9749==    indirectly lost: 0 bytes in 0 blocks
==9749==      possibly lost: 0 bytes in 0 blocks
==9749==    still reachable: 3 bytes in 1 blocks
==9749==         suppressed: 0 bytes in 0 blocks
==9749== Rerun with --leak-check=full to see details of leaked memory
==9749== 
==9749== For counts of detected and suppressed errors, rerun with: -v
==9749== ERROR SUMMARY: 4 errors from 3 contexts (suppressed: 0 from 0)
Segmentation fault

যদি আপনি না জানতেন তবে আপনি ইতিমধ্যে বুঝতে পেরেছেন যে memহিপ বরাদ্দ মেমরি; গাদাটি রানটাইমে প্রোগ্রামের জন্য উপলব্ধ মেমরির অঞ্চলটিকে বোঝায়, কারণ প্রোগ্রামটি স্পষ্টভাবে এটির জন্য অনুরোধ করেছে (আমাদের ক্ষেত্রে ম্যালোক সহ)।

যদি আপনি ভয়ানক কোডটি নিয়ে খেলা করেন তবে আপনি দেখতে পাবেন যে এই সমস্ত স্পষ্টতই ভুল বক্তব্যের ফলস্বরূপ ফলশ্রুতি (একটি মারাত্মক সমাপ্তি ত্রুটি) হয় না।

উদাহরণস্বরূপ কোডগুলিতে আমি স্পষ্টভাবে এই ত্রুটিগুলি করেছি, তবে একই ধরণের ত্রুটিগুলি একটি মেমরি পরিচালিত পরিবেশে খুব সহজেই ঘটে: কিছু কোড যদি কোনও ভেরিয়েবলের (বা অন্য কোনও চিহ্ন) সঠিকভাবে সংরক্ষণ না করে, উদাহরণস্বরূপ যদি এটি খুব তাড়াতাড়ি নিখরচায় হয় তবে কোডের অন্য একটি অংশটি ইতিমধ্যে ফ্রিড মেমরি থেকে পড়তে পারে, যদি এটি কোনওভাবে ঠিকানাটি ভুলভাবে সঞ্চয় করে রাখে, অন্য কোনও কোডের অবৈধ মেমরিতে লিখতে পারে, এটি দু'বার মুক্ত হতে পারে ...

এগুলি পিএইচপি-তে ডিবাগ করা যায় এমন সমস্যা নয়, তাদের একেবারে ইন্টার্নাল বিকাশকারীদের মনোযোগ প্রয়োজন।

ক্রিয়াকলাপটি হওয়া উচিত:

  1. Http://bugs.php.net এ একটি বাগ রিপোর্ট খুলুন
    • আপনার যদি সেগফল্ট থাকে তবে ব্যাকট্র্যাস সরবরাহ করার চেষ্টা করুন
    • যথাযথ বলে মনে হয় তত পরিমাণ কনফিগারেশন তথ্য অন্তর্ভুক্ত করুন, বিশেষত, যদি আপনি অপচেনা ব্যবহার করেন তবে অপ্টিমাইজেশন স্তর অন্তর্ভুক্ত থাকে।
    • আপডেটের জন্য বাগ রিপোর্টটি পরীক্ষা করে দেখুন, আরও তথ্যের জন্য অনুরোধ করা যেতে পারে।
  2. আপনার যদি ওপচে লোড থাকে তবে অপ্টিমাইজেশন অক্ষম করুন
    • আমি ওপ্যাচে বাছাই করছি না, এটি দুর্দান্ত, তবে এর কয়েকটি অপ্টিমাইজেশানগুলি ফল্ট হওয়ার কারণ হিসাবে পরিচিত।
    • যদি এটি কাজ না করে, যদিও আপনার কোডটি ধীর হতে পারে, প্রথমে ওপচাকে আনলোড করার চেষ্টা করুন।
    • এর মধ্যে যে কোনও একটির যদি সমস্যা বা পরিবর্তন হয় তবে আপনার তৈরি বাগ রিপোর্টটি আপডেট করুন।
  3. একবারে সমস্ত অপ্রয়োজনীয় এক্সটেনশন অক্ষম করুন ।
    • প্রতিটি কনফিগারেশন পরিবর্তনের পরে সম্পূর্ণরূপে পরীক্ষা করে, পৃথকভাবে আপনার সমস্ত এক্সটেনশান সক্ষম করতে শুরু করুন।
    • আপনি যদি সমস্যাটির বর্ধিতাংশ খুঁজে পান তবে আপনার বাগ রিপোর্টটি আরও তথ্যের সাথে আপডেট করুন।
  4. লাভ।

কোনও লাভ হতে পারে না ... আমি শুরুতে বলেছিলাম, আপনি কনফিগারেশনের সাথে বিশৃঙ্খলা করে আপনার লক্ষণগুলি পরিবর্তন করার উপায় খুঁজে পেতে সক্ষম হতে পারেন তবে এটি অত্যন্ত হিট এবং মিস, এবং পরবর্তী সময় আপনার সাহায্য করবে না একই zend_mm_heap corruptedবার্তাটি, কেবলমাত্র অনেকগুলি কনফিগারেশন বিকল্প রয়েছে।

এটি সত্যই গুরুত্বপূর্ণ যে আমরা যখন বাগগুলি খুঁজে পাই তখন আমরা বাগের প্রতিবেদন তৈরি করি, আমরা ধরে নিতে পারি না যে বাগটি আঘাত করার পরের ব্যক্তিটি এটি করতে চলেছে ... সম্ভবত এটির চেয়ে বেশি সম্ভবত আসল রেজোলিউশন রহস্যজনক নয়, যদি আপনি এটি তৈরি করেন সমস্যা সম্পর্কে সঠিক মানুষ সচেতন।

USE_ZEND_ALLOC

আপনি যদি USE_ZEND_ALLOC=0পরিবেশে সেট করেন, এটি জেন্ডের নিজস্ব মেমরি পরিচালককে অক্ষম করে; জেন্ডের মেমোরি ম্যানেজার নিশ্চিত করে যে প্রতিটি অনুরোধটির নিজস্ব গাদা আছে, একটি অনুরোধ শেষে সমস্ত মেমরি ফ্রি থাকে এবং পিএইচপি-র জন্য সঠিক মাপের মেমরির অংশ বরাদ্দের জন্য অনুকূলিত হয়।

এটি অক্ষম করা সেই অপ্টিমাইজেশানগুলিকে অক্ষম করবে, আরও গুরুত্বপূর্ণভাবে এটি সম্ভবত মেমরি ফাঁস তৈরি করবে, যেহেতু প্রচুর এক্সটেনশন কোড রয়েছে যা একটি অনুরোধের শেষে (জার্স, টুট) মেমরি মুক্ত করার জন্য জেন্ড এমএমের উপর নির্ভর করে।

এটি লক্ষণগুলিও আড়াল করতে পারে তবে জেন্ডের স্তূপের মতোই সিস্টেমের হিপটি নষ্ট হতে পারে।

এটি আরও সহনশীল বা কম সহনীয় বলে মনে হতে পারে তবে সমস্যার মূল কারণটি ঠিক করুন, এটি পারে না

এটি একেবারেই অক্ষম করার ক্ষমতা ইন্টার্নাল বিকাশকারীদের সুবিধার জন্য; আপনার কখনই জেন্ড এমএম অক্ষম করে পিএইচপি স্থাপন করা উচিত নয়


সুতরাং অন্তর্নিহিত সমস্যাটি আপনি পিএইচপি এর কোন সংস্করণটি চালাচ্ছেন?
ইসমাইল

@ ইসমাইল হ্যাঁ, পাশাপাশি সমস্ত এক্সটেনশনের সংস্করণগুলি যেমন কোনও এক্সটেনশান থেকে সতর্কতা উত্থাপিত হতে পারে।
বিশপ

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

1
এতদূর, এই প্রশ্নের সর্বোত্তম উত্তর এবং একই সাথে আরও অনেক একই প্রশ্নের জন্য
নিকিতা 웃

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

46

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

opcache.enable_cli=0

একবার zend_mm_heap পরিবর্তন করা ত্রুটিযুক্ত ত্রুটি চলে গেছে।


এখানে একই সমস্যা এবং সমাধান! ধন্যবাদ!
মৌরিসিও সানচেজ

2
এই পোস্টের জন্য বিশাল প্লাস 1। আমরা সব চেষ্টা করেছিলাম কিন্তু শেষ পর্যন্ত কেবল এটিই কাজ করে।
জেফ্রি বেরিয়ার

7
আমি নিশ্চিত যে আপনি জানেন যে ক্লাইটি পিএইচপি এর কমান্ড লাইন সংস্করণ এবং উদাহরণস্বরূপ অ্যাপাচি ওয়েব সার্ভারের সাথে ব্যবহৃত পিএইচপি মডিউলটির সাথে তার কোনও সম্পর্ক নেই এবং আমি কী আগ্রহী যে ক্লাইমের সাহায্যে ওপচাকে অক্ষম করা কীভাবে সাহায্য করবে? (আমি ধরে নিচ্ছি যে এটি ওয়েব সার্ভারে ঘটছে)
বায়োজার্ড

@ বায়ো হ্যাজার্ড, ক্লিপ বাদে সাধারণ সেটিং অপক্যাশ রয়েছে en তবে এটি মামলায় সহায়তা করে না
কনস্টান্টিন ইভানভ

এটি এই প্রশ্নের গ্রহণযোগ্য উত্তর হওয়া উচিত। আউটপুট_ফারিং উত্থাপন উত্তর নয়, যেহেতু এটি php.ini এর ডকুমেন্টেশন অনুসারে আপনার ওয়েবসাইট বা অ্যাপ্লিকেশনটিতে নেতিবাচক পার্শ্ব প্রতিক্রিয়া থাকতে পারে।
ব্লুকোলা

41

আপনি যদি লিনাক্স বাক্সে থাকেন তবে কমান্ড লাইনে এটি ব্যবহার করে দেখুন

export USE_ZEND_ALLOC=0

এই আমাকে বাঁচায়! আমি এটি পিএইচপি-এফপিএম পরিষেবা ফাইলের মধ্যে যুক্ত করব (
সিস্টেমড

এটা আমার জন্য এটি। এই লাইনটি যুক্ত করতে মনে রাখবেন /etc/apache2/envvarsযদি আপনি ওপাচি এবং পিএইচপি উভয়ই উপনু সার্ভারে পিপাস (অ্যাপটি) থেকে ইনস্টল করেন তবে এটি উবুন্টু সার্ভারে চালাচ্ছেন। পিএইচপি 7.0-আরসি 4 এই ত্রুটিটি ছুঁড়তে শুরু করেছে যখন আমি ওনড্রেজের সংগ্রহস্থল থেকে এটি ইনস্টল করেছি।
পেড্রো কর্ডেইরো

এবং এটি উইন্ডোতেও কাজ করে:set USE_ZEND_ALLOC=0
নবী কেএজেড

22

unset()এস জন্য পরীক্ষা করুন । নিশ্চিত করুন যে আপনি না তা নিশ্চিত করুন unset()উল্লেখ $thisdestructors (অথবা সমতুল) এবং যে unset()destructors কারণ একই বস্তুর রেফারেন্স গণনা 0. ড্রপ না গুলি আমি কিছু গবেষণা করেছেন এবং লক্ষ্য করেছি যে কী সাধারণত গাদা ঘটায় দুর্নীতি।

Zend_mm_heap ত্রুটিযুক্ত ত্রুটি সম্পর্কে একটি পিএইচপি বাগ রিপোর্ট রয়েছে[2011-08-31 07:49 UTC] f dot ardelian at gmail dot comকীভাবে এটি পুনরুত্পাদন করতে হবে তার উদাহরণের জন্য মন্তব্যটি দেখুন ।

আমার অনুভূতি আছে যে অন্য সমস্ত "সমাধানগুলি" (পরিবর্তন করুন php.ini, কম মডিউলগুলি সহ উত্স থেকে পিএইচপি সংকলন করা ইত্যাদি) কেবল সমস্যাটি আড়াল করে।


6
আমি এই সমস্যাটি সহজ এইচটিএমএল ডোম দিয়ে পাচ্ছিলাম, এবং একটি আনসেট থেকে পরিবর্তন করে $ সরলচিটমल्डম-> ক্লিয়ার () যা আমার সমস্যার সমাধান করেছে, ধন্যবাদ!
alexkb

9

আমার জন্য আগের উত্তরগুলির কোনওটিই কাজ করে নি, যতক্ষণ না আমি চেষ্টা করেছি:

opcache.fast_shutdown=0

এটি এখন পর্যন্ত কাজ বলে মনে হচ্ছে।

আমি যদি পিএইচপি-এফপিএম এবং অ্যাপাচি প্রক্সি_এফসিজি দিয়ে পিএইচপি 5.6 ব্যবহার করছি, যদি তা গুরুত্বপূর্ণ হয় ...


1
সমস্ত বিভিন্ন পরিস্থিতিতে একটি টন "আমিও" প্রতিক্রিয়া দেখিয়েছি, তবে এটি আমার কনফিগারেশনের সাথে সাদৃশ্যপূর্ণ বলে মনে হয়েছে এবং এই গম্ভীর গতি - এই সঠিক পরিবর্তনটি আমার সমস্যাটিকে সরিয়ে দিয়েছে বলে মনে হচ্ছে।
lkraav

6

আমার ক্ষেত্রে, এই ত্রুটির কারণ অ্যারেগুলির মধ্যে একটি খুব বড় হয়ে উঠছিল। আমি আমার স্ক্রিপ্টটি প্রতিটি পুনরাবৃত্তিতে অ্যারেটিকে পুনরায় সেট করতে সেট করে রেখেছি এবং এটি সমস্যার সমাধান করেছে।


এটি আমার জন্য এটি করেছে - ধন্যবাদ! আমি ভাবিনি আবর্জনা সংগ্রহকারী কোনও চক্রীয় রেফারেন্সের স্মৃতি মুক্ত করে দেবে, তাই আমি এটি পরীক্ষা করে দেখিনি।
অর্ধ-দ্রুত

5

বাগ ট্র্যাকার অনুসারে সেট করুন opcache.fast_shutdown=0। দ্রুত শাটডাউনটি জগাখিচুড়ি পরিষ্কার করতে জেন্ডার মেমরি পরিচালক ব্যবহার করে, এটি এটি অক্ষম করে।


এটি আমাদের সেন্টস লিনাক্স 7.2.1511, পিএইচপি 5.5.38 প্রকাশের "জেন্ড_ মিম_হীপ দূষিত" হয়েছে। আমরা এখন অপকোড ক্যাশে ব্যবহার করে পুনরায় শুরু করতে সক্ষম হয়েছি। দিনরাত তা ছাড়া।
রিচার্ড জিন্সবার্গ

অনুস্মারকটির জন্য ধন্যবাদ, এটি আমার সমস্যাটি ছিল!
ওয়েজলার

4

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

আমি যখন দৃশ্যে পৌঁছেছি তখন আউটপুট বাফারিং বন্ধ ছিল। এই থ্রেডটি পড়ে, যা আউটপুট বাফারিংয়ের ইঙ্গিত দেয়, আমি কী ঘটবে তা দেখার জন্য এটি চালু করে (= 4096)। এই মুহুর্তে, তারা সবাই ত্রুটিগুলি দেখানো শুরু করে। এই ত্রুটিটি পুনরাবৃত্তিযোগ্য ছিল যে ভাল ছিল।

আমি গিয়েছিলাম এবং এক্সটেনশনগুলি অক্ষম করা শুরু করেছি। তাদের মধ্যে eaccellerator, PDO, ioncube লোডার, এবং প্রচুর যে লাগছিল সন্দেহে, কিন্তু তেমন কাউকে সাহায্য করেছিল।

অবশেষে আমি দুষ্টু পিএইচপি এক্সটেনশানটিকে "homeloader.so" হিসাবে পেয়েছি, যা একরকম সিপ্যানেল-ইজি-ইনস্টলার মডিউল হিসাবে উপস্থিত হয়। অপসারণের পরে, আমি অন্য কোনও সমস্যা অনুভব করিনি।

এই নোটটিতে, এটি প্রদর্শিত হচ্ছে এটি একটি জেনেরিক ত্রুটি বার্তা তাই আপনার মিলটি এই সমস্ত উত্তরগুলির সাথে পৃথক হবে, আপনি গ্রহণ করতে পারেন এমন সর্বোত্তম ক্রিয়া:

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

উপরের সমস্তটি ব্যর্থ করে, আপনি এই জাতীয় জিনিসগুলিও চেষ্টা করে দেখতে পারেন:

  • পিএইচপি আপগ্রেড বা পুনরায় সংশ্লেষ করা। আশা করি আপনার সমস্যার কারণ যা ঘটছে তা স্থির হয়ে গেছে।
  • আপনার কোডটিকে অন্য (পরীক্ষামূলক) পরিবেশে সরান। এটি যদি সমস্যার সমাধান করে তবে কী পরিবর্তন হয়েছে? php.ini বিকল্পগুলি? পিএইচপি সংস্করণ? ইত্যাদি ...

শুভকামনা।


3

আমি এই ইস্যুটির সাথে এক সপ্তাহের জন্য কুস্তি করেছি, এটি আমার পক্ষে কাজ করেছে, বা কমপক্ষে এটি দেখে মনে হচ্ছে

ইন php.iniএই পরিবর্তনগুলি

report_memleaks = Off  
report_zend_debug = 0  

আমার সেট আপ হয়

Linux ubuntu 2.6.32-30-generic-pae #59-Ubuntu SMP  
with PHP Version 5.3.2-1ubuntu4.7  

এটি কাজ করে না।

তাই আমি একটি বেঞ্চমার্ক স্ক্রিপ্ট ব্যবহার করার চেষ্টা করেছি এবং স্ক্রিপ্টটি যেখানে হ্যাঙ্গ হয়েছে সেখানে রেকর্ডিংয়ের চেষ্টা করেছি। আমি আবিষ্কার করেছি যে ত্রুটির ঠিক আগে, পিএইচপি অবজেক্টটি ইনস্ট্যান্ট করা হয়েছিল এবং অবজেক্টটি যা করণীয় ছিল তা সম্পূর্ণ করতে এটি 3 সেকেন্ডেরও বেশি সময় নিয়েছে, পূর্ববর্তী লুপগুলিতে এটি সর্বোচ্চ 0.4 সেকেন্ড সময় নিয়েছিল। আমি এই পরীক্ষাটি বেশ কয়েকবার চালিয়েছি এবং প্রতিবার একই। আমি ভেবেছি প্রতিবার একটি নতুন অবজেক্ট তৈরি করার পরিবর্তে, (এখানে একটি দীর্ঘ লুপ রয়েছে), আমার অবজেক্টটি পুনরায় ব্যবহার করা উচিত। আমি এ পর্যন্ত এক ডজনেরও বেশি বার স্ক্রিপ্টটি পরীক্ষা করেছি, এবং স্মৃতির ত্রুটিগুলি অদৃশ্য হয়ে গেছে!


1
এটি কিছুক্ষণ কাজ করেছে, তবে ত্রুটি ফিরে এসেছে। আমি কীভাবে এটি বন্ধ করব?
সাম

এটি এমএএমপি প্রো 2.1.1 এর সাথে ম্যাক ম্যাভেরিক্সে আমার জন্য কাজ করেছে।
মিউট্যান্টমাহেশ

এই সমাধানটি সমস্যার স্থায়ীভাবে স্থির করে নি আমি আবার এই ত্রুটি পাওয়া শুরু করি।
মিউট্যান্টমাহেশ

7
নিশ্চয় এটি সমস্যার সমাধানের পরিবর্তে ত্রুটিগুলির প্রতিবেদনটি বন্ধ করে দিচ্ছে?
রবার্ট

2

যে কোনও মডিউল যা বাফারিং ব্যবহার করে তা সন্ধান করুন এবং বেছে বেছে এটি অক্ষম করুন।

আমি CentOS 4.8 এ পিএইচপি 5.3.5 চালাচ্ছি এবং এটি করার পরে আমি খুঁজে পেলাম ই্যাকসিলারেটরটির একটি আপগ্রেডের প্রয়োজন।


2

আমার নিজের সার্ভারেও এই সমস্যাটি ছিল এবং মূল কারণটি ছিল এপিসি। আমি php.ini ফাইলে "apc.so" এক্সটেনশন সম্পর্কে মন্তব্য করেছি, অ্যাপাচি পুনরায় লোড করেছি এবং সাইটগুলি ঠিক ফিরে এসেছিল।


2

আমি উপরের সমস্ত কিছুই চেষ্টা করেছি এবং zend.enable_gc = 0- একমাত্র কনফিগার সেটিংস, এটি আমাকে সহায়তা করেছিল।

পিএইচপি 5.3.10-1ubuntu3.2 সুহসিন-প্যাচ (ক্লায়ার) সহ (নির্মিত: জুন 13 2012 17:19:58)


2

পিএইচপি-র জন্য মঙ্গো ২.২ ড্রাইভারটি ব্যবহার করতে আমার এই ত্রুটি হয়েছিল:

$collection = $db->selectCollection('post');
$collection->ensureIndex(array('someField', 'someOtherField', 'yetAnotherField')); 

W কাজ করবেন না

$collection = $db->selectCollection('post');
$collection->ensureIndex(array('someField', 'someOtherField')); 
$collection->ensureIndex(array('yetAnotherField')); 

OR কাজ! (?!)


এই উত্তরটি আমাকে ডিবাগ করতে সহায়তা করেছিল, মঙ্গো ইস্যুটির পথে। আমার ক্ষেত্রে, পিএইচপি 5.6 + মঙ্গো 1.6.9 ড্রাইভার, পূর্বে জনিত অ্যারে থেকে মানগুলি পুনরুক্তি এবং অনুসন্ধানের সময় জেন্ড_ মিম_হীপ দূষিত বার্তা নিক্ষেপ করা হয়েছিলforeach(selectCollection()->find()) { $arr = .. }
মিহাই মেটেই

2

পিএইচপি 5.3 এ, অনেকগুলি অনুসন্ধানের পরেও, এই সমাধানটি আমার পক্ষে কাজ করেছে:

আমি এই পৃষ্ঠার জন্য এইচএইচপি আবর্জনা সংগ্রহ যোগ করে অক্ষম করেছি :

<? gc_disable(); ?>

সমস্যাযুক্ত পৃষ্ঠার শেষে, যা সমস্ত ত্রুটিগুলি অদৃশ্য করে দিয়েছে।

উত্স


2

আমি মনে করি অনেক কারণেই এই সমস্যা হতে পারে। এবং আমার ক্ষেত্রে, আমি একই নামে 2 টি ক্লাসের নাম রাখি, এবং একজন আরেকজন লোড করার চেষ্টা করবে।

class A {} // in file a.php
class A // in file b.php
{
  public function foo() { // load a.php }
}

এবং এটি আমার ক্ষেত্রে এই সমস্যা সৃষ্টি করে।

(ল্যারাভেল কাঠামো ব্যবহার করে, পিএইচপি কারিগর ডিবি চলছে: বীজ আসল)


1

আমার এই একই সমস্যা ছিল এবং যখন আমার সেশনটির জন্য একটি ভুল আইপি ছিল mem সেভ_প্যাথ মেমক্যাচড সেশনগুলির জন্য ave এটিকে সঠিক আইপিতে পরিবর্তন করা সমস্যার সমাধান করে।


1

যদি আপনি বৈশিষ্ট্য ব্যবহার করছেন এবং বৈশিষ্ট্যটি ক্লাসের পরে লোড করা হয় (অর্থাত্ অটোলয়েডিংয়ের ক্ষেত্রে) আপনার আগে বৈশিষ্ট্যটি লোড করা দরকার।

https://bugs.php.net/bug.php?id=62339

দ্রষ্টব্য: এই বাগটি খুব খুব এলোমেলো; প্রকৃতির কারণে


1

আমার জন্য সমস্যাটি pdo_mysql ব্যবহার করছিল। ক্যোয়ারী 1960 এর ফলাফল ফিরে এসেছে। আমি 1900 রেকর্ড ফেরত দেওয়ার চেষ্টা করেছি এবং এটি কার্যকর হয়। সুতরাং সমস্যা হল pdo_mysql এবং খুব বড় অ্যারে। আমি মূল মাইএসকিএল এক্সটেনশনের সাহায্যে ক্যোয়ারীটি আবার লিখেছি এবং এটি কার্যকর হয়েছে।

$link = mysql_connect('localhost', 'user', 'xxxx') or die(mysql_error());
mysql_select_db("db", $link);

অ্যাপাচি কোনও পূর্ববর্তী ত্রুটির খবর দেয়নি।

zend_mm_heap corrupted
zend_mm_heap corrupted
zend_mm_heap corrupted
[Mon Jul 30 09:23:49 2012] [notice] child pid 8662 exit signal Segmentation fault (11)
[Mon Jul 30 09:23:50 2012] [notice] child pid 8663 exit signal Segmentation fault (11)
[Mon Jul 30 09:23:54 2012] [notice] child pid 8666 exit signal Segmentation fault (11)
[Mon Jul 30 09:23:55 2012] [notice] child pid 8670 exit signal Segmentation fault (11)

1

"zend_mm_heap দূষিত" অর্থ মেমরি পরিচালনায় সমস্যা। যে কোনও পিএইচপি মডিউল দ্বারা সৃষ্ট হতে পারে। আমার ক্ষেত্রে এপিসি ইনস্টল করার কাজ শেষ হয়েছে। তত্ত্বের ক্ষেত্রে অন্যান্য প্যাকেজ যেমন ইএক্সিলেটর, এক্সডেবগ ইত্যাদিও সহায়তা করতে পারে। অথবা, আপনার যদি এই ধরণের মডিউল ইনস্টল থাকে তবে সেগুলি বন্ধ করে দেওয়ার চেষ্টা করুন।


1

আমি একটি পিএইচপি এক্সটেনশন লিখছি এবং এই সমস্যাটির মুখোমুখিও। যখন আমি আমার এক্সটেনশান থেকে জটিল পরামিতিগুলির সাথে একটি বাহ্যিক ফাংশন কল করি, তখন এই ত্রুটিটি পপ আপ হয়।

বাহ্যিক ফাংশনে প্যারামিটারের (চর *) জন্য আমার মেমরি বরাদ্দ না করার কারণ। আপনি যদি একই ধরণের এক্সটেনশন লিখতে থাকেন তবে দয়া করে এতে মনোযোগ দিন।


0

আমার জন্য, এটি জেনডডিবাগার ছিল যা মেমরি ফাঁসের কারণ হয়েছিল এবং মেমোরি ম্যানেজারটিকে ক্র্যাশ করেছিল।

আমি এটি অক্ষম করেছি এবং আমি বর্তমানে একটি নতুন সংস্করণ অনুসন্ধান করছি। যদি আমি এটি না পাই তবে আমি এক্সডিবাগ এ চলে যাব ...


0

কারণ এর সমাধান আমি কখনই পাইনি আমি আমার এলএএমপি পরিবেশ উন্নত করার সিদ্ধান্ত নিয়েছি। আমি পিএইচপি 5.3.x সহ উবুন্টু 10.4 এলটিএসে গিয়েছিলাম এটি আমার জন্য সমস্যাটি বন্ধ করে দিয়েছে বলে মনে হচ্ছে।


0

আমার ক্ষেত্রে, আমি কোডটি অনুসরণ করতে ভুলে গেছি:

);

আমি চারপাশে খেলেছি এবং কোডটি এখানে এবং সেখান থেকে ভুলে গিয়েছি - কিছু জায়গায় আমি প্রচুর দুর্নীতি পেয়েছি, কিছু ক্ষেত্রে কেবল সাদামাটা অল 'সেগ দোষ:

[বুধ জুন 08 17:23:21 ২০১১] [বিজ্ঞপ্তি] চাইল্ড পিড 5720 প্রস্থান সিগন্যাল সেগমেন্টেশন দোষ (11)

আমি ম্যাক 10.6.7 এবং এক্সএএমপিতে আছি।


0

আমি এই ত্রুটিটিও লক্ষ্য করেছি এবং সিএসএসইজিভি'র পিএইচপি 5.2+ এ চালানোর সময় স্পষ্টভাবে রেফারেন্স জোর করতে '&' ব্যবহার করে এমন পুরানো কোড চলাকালীন SIG


0

বিন্যাস

assert.active = 0 

পিএইচপি.আইএনইআই আমার জন্য সহায়তা করেছিল (এটি php5UTF8লাইব্রেরিতে টাইপের প্রতিবেদনের কাজটি বন্ধ করে দিয়ে zend_mm_heap corruptedচলে গেছে)


0

আমার জন্য সমস্যাটি ম্যাকচেড ডিমন ক্র্যাশ হয়েছিল, কারণ পিএইচপি মেমচেচে সেশনের তথ্য সংরক্ষণের জন্য কনফিগার করা হয়েছিল। এটি 100% সিপিইউ খাচ্ছিল এবং অদ্ভুত অভিনয় করছিল। মেমক্যাচের পরে পুনঃসূচনা সমস্যা চলে গেছে।


0

যেহেতু অন্যান্য উত্তরগুলির কোনওটিরই এটি সম্বোধন করা হয়নি, আমি যখন পিটিএইচপি 5.4 এ সমস্যা ছিল তখন আমি ঘটনাক্রমে একটি অসীম লুপ চালাই ran


0

কিছু টিপস যা কারওর পক্ষে সহায়তা করতে পারে

ফেডোরা 20, পিএইচপি 5.5.18

public function testRead() {
    $ri = new MediaItemReader(self::getMongoColl('Media'));

    foreach ($ri->dataReader(10) as $data) {
       // ...
    }
}

public function dataReader($numOfItems) {
    $cursor = $this->getStorage()->find()->limit($numOfItems);

    // here is the first place where "zend_mm_heap corrupted" error occurred
    // var_dump() inside foreach-loop and generator
    var_dump($cursor); 

    foreach ($cursor as $data) {
        // ...
        // and this is the second place where "zend_mm_heap corrupted" error occurred
        $data['Geo'] = [
            // try to access [0] index that is absent in ['Geo']
            'lon' => $data['Geo'][0],
            'lat' => $data['Geo'][1]
        ];
        // ...
        // Generator is used  !!!
        yield $data;
    }
}

var_dummp () ব্যবহার করা আসলে ত্রুটি নয়, এটি কেবল ডিবাগিংয়ের জন্য স্থাপন করা হয়েছিল এবং উত্পাদন কোডে সরানো হবে। তবে আসল জায়গা যেখানে zend_mm_heap হয়েছিল তা হ'ল দ্বিতীয় স্থান।


0

আমি এখানে একই পরিস্থিতিতে ছিলাম, উপরের কিছুই সাহায্য করেনি এবং আরও গুরুতরভাবে যাচাই করে আমার সমস্যাটি খুঁজে পাওয়া যায়, এতে বাফারে কিছু আউটপুট প্রেরণের পরে ডাই ডাই (শিরোনাম ()) থাকে, যে ব্যক্তি কোডটিতে এই কাজ করেছিল সে কেকপিএইচপি সংস্থান সম্পর্কে ভুলে গিয়েছিল এবং সরল "রিটার্ন $ এটি-> রিডাইরেক্ট ($ url)" করেনি।

ভালভাবে পুনরায় উদ্ভাবনের চেষ্টা করা হয়েছিল, এটি ছিল সমস্যা।

আমি আশা করি এটি সম্পর্কিত কাউকে সাহায্য করবে!

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