কেন ফাঁস হওয়া মেমরিটি কার্নেল_টাস্কে দূষিত দেখা দেয় এবং ওএস এক্স এর ফলে আবর্জনা কেন এটি সংগ্রহ করতে পারে না


11

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

diff <(kextstat|tr -s ' ' | cut -d ' ' -f 5) <(kextstat| tr -s ' ' | cut -d ' ' -f 6) 

'তারযুক্ত' এবং 'নাম' শব্দের ব্যতীত অন্য কিছু ফিরে আসবে।

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

সুতরাং, আমার প্রশ্নটি হ'ল: যদি আমি জানি যে কোনও প্রক্রিয়াটি হঠাৎ এবং অপ্রত্যাশিতভাবে পাদদেশের ফাঁকে ফাঁকে ফাঁকে ফাঁস হয়ে গেছে kernel_task, তবে ওএস এক্স কেন বুঝতে পারে না যে কিছু ভুল হয়েছে। যদি পূর্বরূপটি হত্যা আমার অনুপস্থিত malloc()স্মৃতি পুনরুদ্ধার করে তবে ডারউইন আমার জন্য স্বয়ংক্রিয়ভাবে আবর্জনা সংগ্রহ করে না কেন ?

মেমরি পরিচালনা কীভাবে কাজ করে তা সম্পর্কে আমার কি একটি মৌলিক ভুল বোঝাবুঝি আছে?

সম্পাদনা: (15/9/15)

আমি যা বলছি তার একটি প্রদর্শন এখানে দেওয়া হয়েছে। প্রথমত, আমি এর দ্বারা উচ্চ মেমরির ব্যবহার লক্ষ্য করছি kernel_task(নোট পূর্বরূপটি উন্মুক্ত, ক্রিয়াকলাপ মনিটরের নীচে কেবল মেশিনের 333 এমবি ব্যবহার করে):

উচ্চ কার্নেল মেমরি ব্যবহার

নীচে অ্যাশলির সাহায্যকারী মন্তব্যগুলি অনুসরণ করে, আসুন প্রতিটি কেক্সট কতটা ব্যবহার করছে তা খুঁজে বার করুন:

$ kextstat | awk 'NR==1{ printf "%10s %s\n", $5, $6; } NR!=1{ printf "%10d %s\n", $5, $6; }' | sort -n

...
...
...
   1249280 com.apple.driver.DspFuncLib
   1769472 com.apple.nvidia.driver.NVDAGK100Hal
   2629632 com.apple.nvidia.driver.NVDAResman
   6184960 com.apple.driver.AirPort.Brcm4360
$

সুতরাং, একটি বিশাল পরিমাণ না। আমার মেশিনে পৃথক এবং সংহত দুটি জিপিইউ রয়েছে; তাদের চালকরা কেবল কয়েকটি এমআইবি ওয়্যার্ড র‌্যাম ব্যবহার করছেন। আমার কুঁচকে, আসুন পূর্বরূপটি মেরে ফেলি এবং এর মেমরির পদক্ষেপের কী ঘটে তা দেখুন kernel_task:

খুনের পূর্বরূপ জিনিসগুলিতে সহায়তা করে

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

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


আমি দুটি বিষয় সম্পর্কে বিভ্রান্ত - আপনি স্পষ্ট করে বলতে পারেন? 1) আমি মনে করি আপনার diffকমান্ড আউটপুট থেকে Sizeএবং Wiredকলামগুলি তুলনা করছে kextstat। আমি সম্মত হই যে Sizeএটি "বরাদ্দ মেমরি", তবে আমি "বরাদ্দ Wiredপ্রত্যাশিত" বলে মনে করি না ( man kextstatএটি "কর্টেল দখল করা কার্নেল মেমরির তারযুক্ত বাইটগুলির সংখ্যা" হিসাবে বর্ণনা করে)। 2) আপনি কি পূর্বরূপের সাথে সমস্যাটি কখন Sizeএবং এর মধ্যে পার্থক্য দেখছেন Wired?
অ্যাশলে

1) আপনি ঠিক বলেছেন - আমি আকার এবং তারযুক্ত থেকে উপাদানগুলির সাথে তুলনা করছি kextstat। আমার বোধগম্যতা হল যদি কোনও কেেক্সট ফাঁস হয়ে যায় তবে বরাদ্দকৃত বাইটগুলি এবং কার্নেল যা জানে তা বরাদ্দ করা আলাদা হবে be এই ক্ষেত্রে, আমি সেখানে দেখাতে হবে যে আমি রেখেছি না তাই হয়, 2) এই যখন পূর্বরূপ eats RAM ঘটবে না - একটি লিক kext আছে। পরিবর্তে, kernel_taskঅনেক বেড়ে যায়। আমি চেষ্টা করব এবং এই সমস্যাটি আবার তৈরি করব এবং একটি ছবি নেব :-)।
ল্যান্ডক

ধন্যবাদ! এক সেকেন্ড চেপে ধরুন: আমি কেবল একটি উত্তর লিখছি যা সাহায্য করতে পারে।
অ্যাশলে

উত্তর:


6

OS X এর মূল আবর্জনা সংগ্রহ নয়; IOKit এর libkern সি ++ রানটাইম ডেভেলপারদের প্রয়োজন তাদের নিজস্ব মেমরি পরিচালনার জন্য।

ম্যাক মেমরি ম্যানেজমেন্ট

থেকে কিভাবে ম্যাক OS X মেমরি ব্যবস্থাপনা কাজ করে?

অ্যাপল ম্যাক কার্নেলের সর্বনিম্ন স্তর এবং এটির বিকাশকারী ডকুমেন্টেশনের অংশ হিসাবে ওয়েবে ভার্চুয়াল মেমরি সাবসিস্টেমটি বেশ ভালভাবে ডকুমেন্ট করে।

কার্নেগি মেলন বিশ্ববিদ্যালয় যে কার্নেলটি তৈরি করেছে , তাই আপনি এটি বেশ সহজেই বর্ণনা করে এমন কয়েক ডজন পেপার খুঁজে পেতে পারেন dozens

অন্যান্য উত্স

আবর্জনা সংগ্রহ

আবর্জনা সংগ্রহ ব্যবহারকারী বা অ্যাপ্লিকেশন স্তরে বিদ্যমান এমনকি এই স্তরে, আবর্জনা সংগ্রহ কেবল তখনই সহায়তা করে যদি অ্যাপ্লিকেশনটি সমস্ত দাবি মেমরিতে প্রকাশ করে। একটি বিজ্ঞপ্তি নির্ভরতা আবর্জনা সংগ্রহকে পরাস্ত করতে পারে। আবর্জনা সংগ্রহ নিজেই গবেষণার একটি বিকশিত ক্ষেত্র এবং সঠিকভাবে পাওয়া কঠিন

বাগ এবং মেমরি ফুটো প্রতিবেদন করুন

ওএস এক্স এর মধ্যে বাগগুলি স্মৃতি ফাঁস হবে। কোড বেসের আকার দেওয়া, এটি প্রায় নিশ্চিত।

দয়া করে প্রজননযোগ্য বাগগুলি সরাসরি অ্যাপলকে রিপোর্ট করুন । প্রতিটি ত্রুটি প্রতিবেদন সাহায্য করে এবং সম্ভবত আপনার উদাহরণ হ'ল অ্যাপল ইঞ্জিনিয়ারদের কারণটি পিন করতে সহায়তা করবে।


এটি হতাশাজনক, তবে নিঃসন্দেহে সঠিক। আমি অ্যাপলকে বাগটি জানিয়েছি - আমি কেবল এটি বিরক্তিকর মনে করি!
ল্যান্ডাক

2
আপনার প্রশ্নটির সম্পাদনা হিসাবে আপনি বাগ নম্বরটি ভাগ করতে পারেন। অন্যরা আপনার প্রশ্নকে সহায়ক মনে করে তারপরে আপনার আসলটি লক্ষ্য করে ডুপ্লিকেট বাগ ফাইল করতে পারে। সম্পর্কিত বাগের একটি স্তূপ আরও প্রকৌশল সময়কে ন্যায়সঙ্গত করতে সহায়তা করবে।
গ্রাহাম মিলন

4

এখানে আমার অনুমান, ধরে নিচ্ছি আপনার ম্যাকের একটি সংহত GPU রয়েছে (যেমন ইন্টেল আইরিস গ্রাফিক্স)।

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

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

আমি অনুমান করেছি যে আপনি মাঝেমধ্যে গ্রাফিক্স কার্ড ড্রাইভার এবং / অথবা পূর্বরূপে একটি বাগ দেখতে পাচ্ছেন যা প্রাকদর্শন আপনার থিসিস পিডিএফ পুনরায় লোড করার সময় সিস্টেম মেমরি সঠিকভাবে প্রকাশ করে না। (তবে এই বাগটি ওএস এক্স দ্বারা প্রশমিত করা হয়েছে / পূর্বরূপটি প্রস্থান করলে ড্রাইভার সঠিকভাবে মেমরি ছেড়ে দেয়))

আপনি আউটপুটটি দেখার চেষ্টা করতে kextstatপারেন Sizeএবং সমস্যাটি অনুভব করার সময় কলামের সংখ্যা বাড়ছে কিনা তা দেখতে পারেন । আমার তত্ত্বটি হ'ল আপনি উল্লেখ করেছেন যে 8 জিবি বৃদ্ধি গ্রাফিক্স কার্ড ড্রাইভারের কারণে হবে।

নিম্নলিখিত কমান্ড (একটি মন্তব্যে থেকে এই সংশ্লিষ্ট এবং আকর্ষণীয় উত্তর ) আউটপুট বাছাই করে kextstatসহজে যা kext সবচেয়ে মেমরির যদিও নোট এই প্রকারের ব্যবহার করছে (দেখুন করতে Wiredকলাম ... সেখানে একটি অনুরূপ, সহজতর জাদুমন্ত্রোচ্চারণ এর এই আপনি যদি এটি টুইট করতে চান তবে একটি ব্যাখ্যা সহ উত্তর দিন )।

kextstat | awk 'NR==1{ printf "%10s %s\n", $5, $6; } NR!=1{ printf "%10d %s\n", $5, $6; }' | sort -n

ভাল অনুমান - এবং একটি দরকারী, সাজানো আউটপুট জন্য আপনাকে প্রচুর ধন্যবাদ kextstat। যাইহোক, এটি এখনও ঠিক তেমনটি দেখা যাচ্ছে না: প্রাকদর্শন-গাবলিংয়ের সময়, এর স্মৃতি পদক্ষেপটি com.apple.nvidia.driver.*অপরিবর্তিত ছিল। এটি প্রতিফলিত করার জন্য আমি আমার প্রশ্ন সম্পাদনা করেছি।
লন্ডাক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.