আমাকে আগেই বলা হয়েছে যে কোনও অ্যাপ্লিকেশনটির মেমরি ফুটো হওয়ার একটি চিহ্ন যেটি 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 আমি এখনও আপেলের কাছ থেকে প্রতিক্রিয়ার জন্য অপেক্ষা করছি। আপনি যদি ক্রিয়াকলাপ মনিটরে প্রক্রিয়াটি পরীক্ষা করেন তবে আকর্ষণীয় কিছু নেই তবে সম্ভবত আমি কিছু অনুপস্থিত।
kextstat
। আমার বোধগম্যতা হল যদি কোনও কেেক্সট ফাঁস হয়ে যায় তবে বরাদ্দকৃত বাইটগুলি এবং কার্নেল যা জানে তা বরাদ্দ করা আলাদা হবে be এই ক্ষেত্রে, আমি সেখানে দেখাতে হবে যে আমি রেখেছি না তাই হয়, 2) এই যখন পূর্বরূপ eats RAM ঘটবে না - একটি লিক kext আছে। পরিবর্তে, kernel_task
অনেক বেড়ে যায়। আমি চেষ্টা করব এবং এই সমস্যাটি আবার তৈরি করব এবং একটি ছবি নেব :-)।
diff
কমান্ড আউটপুট থেকেSize
এবংWired
কলামগুলি তুলনা করছেkextstat
। আমি সম্মত হই যেSize
এটি "বরাদ্দ মেমরি", তবে আমি "বরাদ্দWired
প্রত্যাশিত" বলে মনে করি না (man kextstat
এটি "কর্টেল দখল করা কার্নেল মেমরির তারযুক্ত বাইটগুলির সংখ্যা" হিসাবে বর্ণনা করে)। 2) আপনি কি পূর্বরূপের সাথে সমস্যাটি কখনSize
এবং এর মধ্যে পার্থক্য দেখছেনWired
?