আমি কীভাবে স্বয়ংক্রিয়ভাবে এমন প্রক্রিয়াগুলিকে হত্যা করব যা মেমরি ফাঁস করে?


8

স্মৃতি ফাঁস করার প্রক্রিয়াগুলির সাথে আমার সমস্যা আছে। এগুলির ফলে আমার হার্ড ড্রাইভটি অদলবদলের ফাইলগুলিতে পূর্ণ হতে পারে /private/var/vm

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

আমি এর মধ্যে rssএবং dataসীমাগুলি সেট করার চেষ্টা করেছি /etc/launchd.confতবে মনে হয় এটির কোনও প্রভাব ছিল না।

এটি আমার /etc/launchd.conf:

limit data 8589934592 8589934592
limit rss 8589934592 8589934592

এখানে launchctl limitফলাফল:

% launchctl limit
    cpu         unlimited      unlimited
    filesize    unlimited      unlimited
    data        8589934592     8589934592
    stack       8388608        67104768
    core        0              unlimited
    rss         8589934592     8589934592
    memlock     unlimited      unlimited
    maxproc     709            1064
    maxfiles    256            unlimited

এটি আমার .zshrc:

ulimit -t 600
ulimit -d 512000
ulimit -v 1024000

এবং ulimit -aআউটপুট (জেডএসএইচ):

% ulimit -a
    -t: cpu time (seconds)         600
    -f: file size (blocks)         unlimited
    -d: data seg size (kbytes)     512000
    -s: stack size (kbytes)        8192
    -c: core file size (blocks)    0
    -v: address space (kb)         1000
    -l: locked-in-memory size (kb) unlimited
    -u: processes                  709
    -n: file descriptors           256

তবুও topপ্রক্রিয়া সম্পর্কে আমাকে যা বলেছে তা এখানে :

PID  COMMAND      %CPU  TIME     #TH  #WQ  #POR #MRE RPRVT  RSHRD  RSIZE  VPRVT  VSIZE  PGRP PPID
886  process      30.8  01:16.40 1/1  0    17   332  2259M+ 184K   2072M- 19G+   38G    882  885

এটি কেবল মনে হয় যে নথিভুক্ত মেমরি সীমাবদ্ধতার কোনও পদ্ধতিই আসলে কাজ করে না। এমন কোনও অতিরিক্ত ব্যবস্থা আছে যা আমি মিস করেছি?


230 জিআইবি ?! আমি সত্যিই আশা করি আপনি একটি দশমিক পয়েন্ট মিস করেছেন।
duci9y

@ duci9y নাপ :-(
সাম হোচেভার

3
সেক্ষেত্রে, আমি সত্যিই আশা করি কেউ আপনার সমস্যার সমাধান করেছেন। আপনি আমার প্রার্থনায় থাকবেন।
duci9y

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

আগুনে পয়েন্টস অবজেক্টস।
duci9y

উত্তর:


3

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

এই ফিল্টার করা তালিকা থেকে, আমি পিআইডি প্রসেস leaksকমান্ডটি ( ম্যান 1 লিক দেখুন ) ব্যবহার করব । কমান্ড দ্বারা রিপোর্ট করা মোট ফাঁস মেমরির পরিমাণ যদি অন্য থ্রেশহোল্ডের চেয়ে বেশি হয়, তবে আমি এটি মেরে এবং পুনরায় পুনঃস্থাপন করব।

দ্রষ্টব্য : আপনার কী করা উচিত তা না জেনে কোনও OS / সিস্টেম প্রক্রিয়া যাতে না ঘটে তবে আপনার যত্ন নেওয়া উচিত। এই পরিস্থিতি এড়াতে আপনার "সাদা তালিকা" পদ্ধতির সাহায্যে তালিকাটি ফিল্টার করে দেওয়া উচিত।


1

বেশিরভাগ প্ল্যাটফর্মে ulimit প্রত্যাশার মতো কাজ করে না।

যদি এটি কোনও ডেস্কটপ অ্যাপ না হয় তবে উপযুক্ত প্রক্রিয়া সুপারভাইজার যেমন https://github.com/arya/bluepill দিয়ে অপরাধীকে চালান

এটি যদি কোনও ডেস্কটপ অ্যাপ হয় তবে অ্যাপ বিকাশকারীদের সাথে যোগাযোগ করুন। প্রতিক্রিয়া প্রয়োজনীয় এবং গুরুত্বপূর্ণ।

ম্যাকের জন্য ওওএম হত্যাকারী জিইউআইতে থাকা ইউএক্স ভয়ঙ্কর। প্রতিটি প্রসেসের রাম ব্যবহারের জন্য আনুপাতিক বারের গ্রাফের সাথে এটি উত্থিত বৃহত্তম আকারে হওয়া উচিত। তদ্ব্যতীত, সমাধান হওয়ার পরে এটি স্বয়ংক্রিয়ভাবে সমস্ত বিরামপ্রাপ্ত প্রক্রিয়াগুলি সাইনকন্ট করা উচিত।


1
বেশ কয়েকটি অ্যাপ্লিকেশন নিয়ে আমার সমস্যা হয়েছে, তবে উটের পিঠে ভেঙে যাওয়া খড়টি ছিল অ্যাপলের llvm-g++। সমস্যাটি রাডারে প্রকাশিত হয়েছে। আমি কৌতূহলী: অন্য কোন প্ল্যাটফর্মের অ-কাজ করছে ulimit? আমি প্রায় ২০ বছর ধরে ইউনিক্সের বেশ কয়েকটি স্বাদ ব্যবহার করে আসছি এবং এর একটি দেখতে আমার মনে নেই।
সাম হোচেভার

-2

আপনার যদি পুনরায় বুটগুলির প্রয়োজন হয় তবে আপনার কেবল launchctl limitকমান্ডটি ব্যবহার করা উচিত ।

আপনার যদি অ্যাপ্লিকেশনটির স্মৃতি সীমাবদ্ধ করতে হয় তবে আপনার স্ট্যাক সেগমেন্টও সীমাবদ্ধ করা উচিত।


আপনি আউটপুটে দেখতে পাচ্ছেন, স্ট্যাকের আকার এবং ডেটা আকার উভয়ই সীমাবদ্ধ। আমি প্রশ্ন জিজ্ঞাসা করেছি কারণ কাজ launchctl limitকরে না
সাম হোচেভার

ulimitআপনি প্রয়োজন হিসাবে আপনার প্রয়োজন হিসাবে কাজ করে নাlaunchctl limitআছে।
ইয়ার নিম

এবং আরও একটি মুহুর্ত সীমাতে আলোকিত করা: যখন প্রোগ্রাম সীমাতে পৌঁছায় তা সতর্কতা গ্রহণ করে। তবে নরম সীমাবদ্ধতার সাথে ক্রিয়া কার্যকরভাবে কার্যকর করা হবে, কঠোরতার সাথে - এটি ব্যর্থ হবে। সুতরাং প্রোগ্রামটি যদি হার্ড সীমা ছাড়িয়ে মেমরির জন্য অনুরোধ করে তবে কোনও মেমরি বরাদ্দ করা হবে না।
Eir নিম

launchctl limitকাজ করে না , বা আমি প্রশ্ন জিজ্ঞাসা করব না।
সাম হোচেভার

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