চলমান প্রক্রিয়াটির একটি স্মৃতি ফাঁস কীভাবে খুঁজে পাব?


19

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


ভালগ্রাইন্ড খুব দরকারী, আমি একে স্বজ্ঞাতও বলব।
user400344

উত্তর:


13

কারা স্মৃতি ফাঁস করছে তা খুঁজে পাওয়ার জন্য এখানে প্রায় গ্যারান্টি পদক্ষেপ রয়েছে:

  1. প্রক্রিয়াটির পিআইডি সন্ধান করুন যা মেমরি ফাঁস করে দেয়।

    ps -aux
  2. ক্যাপচার /proc/PID/smapsএবং কিছু ফাইল সংরক্ষণ করুন BeforeMemInc.txt

  3. স্মৃতিশক্তি বৃদ্ধি না হওয়া পর্যন্ত অপেক্ষা করুন।
  4. আবার ক্যাপচার /proc/PID/smapsএবং এটি সংরক্ষণ করুনafterMemInc.txt
  5. প্রথম smapsএবং দ্বিতীয় মধ্যে smapsযেমন পার্থক্য সন্ধান করুন

    diff -u beforeMemInc.txt afterMemInc.txt

  6. ঠিকানা সীমা নোট করুন যেখানে মেমরিটি বৃদ্ধি পেয়েছে, উদাহরণস্বরূপ:

       beforeMemInc.txt            afterMemInc.txt
    ---------------------------------------------------
    2b3289290000-2b3289343000   2b3289290000-2b3289343000  #ADDRESS
    Shared_Clean:    0 kB       Shared_Clean:    0 kB          
    Shared_Dirty:    0 kB       Shared_Dirty:    0 kB
    Private_Clean:   0 kB       Private_Clean:   0 kB
    Private_Dirty:  28 kB       Private_Dirty:  36 kB  
    Referenced:     28 kB       Referenced:     36 kB
    Anonymous:      28 kB       Anonymous:      36 kB  #INCREASE MEM
    AnonHugePages:   0 kB       AnonHugePages:   0 kB
    Swap:            0 kB       Swap:            0 kB
    KernelPageSize:  4 kB       KernelPageSize:  4 kB
    MMUPageSize:     4 kB       MMUPageSize:     4 kB
    Locked:          0 kB       Locked:          0 kB
    VmFlags: rd wr mr mw me ac  VmFlags: rd wr mr mw me ac
  7. চলমান প্রক্রিয়াতে মেমরি ডাম্প করতে জিডিবি ব্যবহার করুন বা কোর্ড্প ব্যবহার করে নিন gcore -o process

  8. কিছু ফাইলের মেমরি ডাম্প করতে আমি চলমান প্রক্রিয়াতে জিডিবি ব্যবহার করি।

    gdb -p PID
    dump memory ./dump_outputfile.dump 0x2b3289290000 0x2b3289343000
  9. এখন, stringsকমান্ড ব্যবহার করুন বা hexdump -Cমুদ্রণdump_outputfile.dump

    strings outputfile.dump
  10. আপনি পঠনযোগ্য ফর্ম পাবেন যেখানে আপনি আপনার উত্স কোডে এই স্ট্রিংগুলি সনাক্ত করতে পারেন।

  11. ফাঁস খুঁজে পেতে আপনার উত্সটি বিশ্লেষণ করুন।


12

আমি মনে করি স্মৃতিশক্তিটি আপনি যা চান তা ঠিক।

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

এটি জিএনইউ / লিনাক্স এবং ফ্রিবিএসডি-তে কাজ করে।

দ্রষ্টব্য: আমি লেখক, কোন পরামর্শ স্বাগত জানানো হয়

== সম্পাদনা ==

আমি অন্য একটি সরঞ্জাম লিবল্যাক লিখি , যা LD_PRELOAD দ্বারা মেমরির ফাংশনগুলি হুক করে।

লক্ষ্য প্রোগ্রামটি পরিবর্তন করার দরকার নেই। যদিও আপনাকে LD_PRELOAD দিয়ে অগ্রগতি পুনরায় চালু করতে হবে, আপনি চালনার সময় সনাক্তকরণ সক্ষম / অক্ষম করতে পারবেন।

কোনও সংকেত ফাঁদ না থাকায় পারফরম্যান্সে খুব কম প্রভাব পড়ছে।

অনুরূপ সরঞ্জামগুলির সাথে তুলনা করা (যেমন এমট্রেস), এটি সন্দেহজনক মেমরি ফুটো পয়েন্টে সম্পূর্ণ কল-স্ট্যাক প্রিন্ট করে।


1
আমি স্পষ্টত কোনও ফাঁসের জন্য নিরীক্ষণ করার জন্য খুব দরকারী সরঞ্জাম হিসাবে মেমলেক্সের প্রতিজ্ঞা করি। আউটপুট সারাংশ আশ্চর্যজনক কার্যকর । প্রায় আমি পছন্দ করেছিলাম যে আমি নিজেই এটি লেখার প্রক্রিয়াকরণ ক্ষমতা থাকলে লিখতাম। এই জন্য ধন্যবাদ
sehe

6

লিনাক্সে, আপনি আপনার প্রোগ্রামে এমট্রেস সক্ষম করতে পারেন তবে এটি একটি কোড পরিবর্তন।

ওপেনবিএসডি-তে, আপনি ম্যালোক স্ট্যাটাস চেষ্টা করতে পারেন ।

গুগলের লিক চেকারটিও একবার নজর দিতে পারা যায় এবং এমট্রেসের বিপরীতে আপনি LD_PRELOADপুনরায় সংশোধন এড়াতে ব্যবহার করতে সক্ষম হতে পারেন ।


0

আমি মনে করি প্রোগ্রাম সরাসরি সোর্স কোড শুরু করার পরে বরাদ্দ পর্যবেক্ষণের জন্য সহায়তা সরবরাহ না করে, আপনি ভাগ্য থেকে দূরে। আমি ভাবতে পারি যে দুটি কারণ এখানে:

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

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


0

আইবিএমের পিউরিফাই সম্ভবত সবার প্রাচীন এবং সবচেয়ে পরিশীলিত সরঞ্জাম। এটি কোডে লাইন নম্বরটিকে পতাকাঙ্কিত করবে যা মেমরি ফাঁস হওয়ার কারণ।

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