মেমরি ফুটো ঠিক করা কতটা গুরুত্বপূর্ণ?


19

আমি ভ্যালগ্রিংয়ের মাধ্যমে পেয়েছি যে কিছু জিটিকে + প্রোগ্রাম মেমরি ফাঁস করে। এই ফাঁসগুলি ঠিক করা কতটা গুরুত্বপূর্ণ? আমি বলতে চাইছি, প্রায়শই সেই প্রোগ্রামগুলি খুব ভালভাবে কাজ করে তবে অন্যদিকে, কেউ কখনও নিশ্চিত হতে পারে না যে কেউ যদি অন্য কোনও প্রোগ্রামে লিক কোডের অংশটি অনুলিপি করতে চায় তবে। এবং আমি নিশ্চিত নই যে জিটিকে + প্রোগ্রামগুলির ধারণাটি দ্রুত কাজ করবে এবং তাই এখানে ফাঁস রয়েছে।

সুতরাং যদি আমি কখনও কখনও কোনও ওপেন সোর্স প্রোগ্রামে একটি মেমরি ফাঁস পাই, আমি কি এটি ঠিক করব বা উদাহরণস্বরূপ দক্ষতার সমস্যাগুলির জন্য থাকি এবং তাই প্রোগ্রামারগুলির মূল ধারণাটি ছিল কিছু ছোট লিক কোড?


17
মেমরি ফাঁস সর্বদা অনাকাঙ্ক্ষিত। প্রোগ্রামটি শেষ না হওয়া পর্যন্ত তারা হোস্ট প্রোগ্রাম সহ পুরো সিস্টেম ব্যবহার করতে পারে না এমন সংস্থানগুলি উপস্থাপন করে।
recursion.ninja

পর্যাপ্ত সরঞ্জাম / লাইব্রেরি রয়েছে যা মেমরি ফাঁস সনাক্তকরণের জন্য কাজ করে। এটি প্রচেষ্টার পক্ষে মূল্যবান, কারণ আপনার পক্ষে এপিআই ব্যবহার ভুল হতে পারে।
জোপ ডিমেন

1
পার্শ্ব নোট হিসাবে - ভালগ্র্যান্ডের দুর্দান্ত তবে কিছু মিথ্যা ইতিবাচক প্রতিবেদন করতে পারে (আমি এগুলিকে GObject এ দেখেছি)।
ম্যাকিয়েজ পাইচোটকা

গণনা প্রক্রিয়াজাতকরণ এবং মেমোরির উপর নির্ভর করে: প্রাক্তনটি কোড, এবং এটির পরে যে স্থানটি চলে এটি room
imallett

1
"সর্বদা কোডটি এমনভাবে কোড করুন যেন আপনার কোডটি বজায় রাখা ব্যক্তি হিংস্র মনোবিজ্ঞানী যিনি জানেন আপনি কোথায় থাকেন" "
জেসি সি স্লিকার 20

উত্তর:


6

মেমরি ফুটো ঠিক করা কতটা গুরুত্বপূর্ণ তা সমস্যার তীব্রতার উপর নির্ভর করে এবং আপনাকে আরও কী কী করতে হবে তা গুরুত্বপূর্ণ। আমার অভিজ্ঞতা হ'ল ছোট মেমরি ফাঁস বেশিরভাগ অ্যাপ্লিকেশনগুলির জন্য বরং সৌম্য হতে থাকে। একটি ডেস্কটপ অ্যাপ্লিকেশন সেশনের জীবনকাল ছোট মেমরি ফুটো থেকে কোনও অবক্ষয় দেখতে সাধারণত দীর্ঘ হয় না।

আপনি যদি 24/7 চলমান একটি সার্ভার লিখতে থাকেন তবে ছোট মেমরি ফাঁস সময়ের সাথে যুক্ত হতে পারে এবং একটি বড় সমস্যা হয়ে উঠতে পারে। তবে সে কারণেই অনেক সংস্থা তাদের সার্ভারগুলি দৈনিক বা সাপ্তাহিক পুনঃসূচনা করার সময়সূচী করে। মেমরি ফাঁসের সন্ধানের প্রচেষ্টাটি যা অর্জন করা যায় তার সাথে প্রায়শই অতিরিক্ত সম্পর্কিত, তাই নিয়মিত সার্ভারগুলি পুনরায় চালু করা এবং আরও গুরুত্বপূর্ণ বিষয়গুলিতে এগিয়ে যাওয়া আরও সহজ it's


2
আমি এমন কোনও সংস্থায় কখনও কাজ করি নি যা সাপ্তাহিক তাদের সার্ভার পুনরায় চালু করে ... এমনকি দৈনিক কম। আমি খরচ একমত লিক ঠিক করতে এটি ঠিক করার উচ্চ হতে পারে কিন্তু এই মনোভাব সবার জন্যেই হচ্ছে না ভাল আইএমও হল
Rémi

@ রুমি বেশিরভাগ ক্ষেত্রে না থাকলেও এমএমও গেম সার্ভারগুলি সাধারণত সাপ্তাহিক ভিত্তিতে করে।
সুজোরড

35

সংক্ষিপ্ত চলমান প্রোগ্রামগুলির জন্য মেমরি ফাঁস ততটা গুরুত্বপূর্ণ নয়; ওএস সমাপ্তির পরে সবকিছু পুনরায় দাবি জানাবে, তবে তারা অন্যান্য সংস্থানগুলি প্রকাশ না করার কারণ হতে পারে।

তবে সংক্ষিপ্তভাবে চলমান হওয়া আপেক্ষিক, একটি ফুটো কয়েক ঘন্টাের মধ্যে নিয়ন্ত্রণের বাইরে চলে যেতে পারে বা কয়েক সপ্তাহ অবহেলিত থাকতে পারে।

আমার পরামর্শটি হ'ল প্রস্তাবিত ফিক্স সহ ট্র্যাকারে একটি বাগ ফাইল করা, যদি সীসা যত্ন নেয় তবে তিনি এটিকে ঠিক করবেন।

ফাঁসের ধরণটিও গুরুত্বপূর্ণ। এটা সম্ভব যে বরাদ্দটি ফাঁস হ'ল এক-অফ বরাদ্দ যেখানে দেব ইচ্ছাকৃতভাবে পরিষ্কারের জন্য ওএসের উপর নির্ভর করেছিলেন। এগুলি ভালগ্রাইন্ডের উপর একটি মিথ্যা ইতিবাচক দেবে।


4
আমি বেশিরভাগই একমত। তবে আমি আপনাকে মেমরি ফুটোটির গুরুত্ব সম্পর্কে পরামর্শ দেওয়ার পরামর্শ দিচ্ছি। মেমরি ফাঁস হালকাভাবে নেওয়া উচিত নয় এবং আপনার অ্যাপ্লিকেশনটির কিছু আকর্ষণীয় "বৈশিষ্ট্য" তৈরি করতে পারে।
ভ্লাদিমির কোকজানিক

@ ভ্লাদিমিরকজানসিক: "বৈশিষ্ট্য" এর জন্য +1
এমিলিও গারাভাগলিয়া

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

2
@ ডাঙ্ক: এটি নির্ভর করে: আপনি যদি grepখুব বড় ফাইলের মাধ্যমে এবং আপনার প্রোগ্রামটি প্রতিটি ইনপুট লাইনের জন্য কয়েকটি বাইট ফাঁস করে দেয় তবে আপনার স্মৃতিশক্তি শেষ হয়ে যাবে।
জর্জিও 21

0

এই একটি বিষয়ে আমার স্বীকারোক্তিমূলক মতামত অনুসারে, কমপক্ষে কোনও লাইব্রেরিতে শারীরিক ফাঁস হওয়ার কোনও অজুহাত নেই যা লক্ষ্য করে ব্যাপকভাবে প্রয়োগ করা যায় be সুতরাং আমি জিটিকে + বিকাশকারীদের এটি ঠিক না করা পর্যন্ত বাগটি খুঁজতে চাই।

কোনও লাইব্রেরির atexitকলব্যাকগুলি নিবন্ধভুক্ত করা যথেষ্ট ন্যূনতম যে কোনও স্মৃতি মেমরি মুক্ত করার জন্য এটি কমপক্ষে লোড হওয়ার পরে বরাদ্দ করে। যদি এটি কিশোর বরাদ্দগুলির একটি নৌকা বোঝাই ব্যয় এড়াতে চায় তবে এটি প্রথমে করা উচিত নয়।

এমনকি সবচেয়ে অলস প্রোগ্রাম যা কেবলমাত্র একবারে মেমরির কিশোর অংশগুলির একটি নৌকা বোঝা বরাদ্দ করতে চায় একটি সরল ক্রমযুক্ত ক্রমিক বরাদ্দকারী ব্যবহার করতে পারে যা কেবল শাটডাউনে সমস্ত স্মৃতি মুছে দেয়। যদি বরাদ্দকারী এমনকি প্রান্তিককরণের সাথেও ডিল করতে না চায়, তবে এটি কেবলমাত্র প্রতিটি একক অংশকে সর্বাধিক প্রান্তিককরণের সীমানায় প্যাড করতে পারে। যদি স্বতন্ত্রভাবে সেই সমস্ত কিশোর অংশগুলি মেমরির মুক্ত না করে দ্রুত শাটডাউন সময়ের সাথে উপকৃত হতে সক্ষম হয়, তবে এটি তেমনি তুচ্ছ প্রচেষ্টাটির বিনিময়ে তাত্পর্যপূর্ণ প্রচেষ্টার বিনিময়ে একটি বৃহত্তর ব্যবসায়িক উপকারে দাঁড়িয়েছে যা এই জাতীয় ক্রমিক বরাদ্দকারীকে স্মৃতিটিকে একটি সরল অনুক্রমিক ফ্যাশনে পোল করে with তুলনায় অনেক দ্রুত বরাদ্দmallocএবং আরও ক্যাশে-বান্ধব মেমরি প্যাটার্নগুলি, যখন লাইব্রেরিটি করা হয় তখন কেবল বরাদ্দকারী দ্বারা চালিত সামঞ্জস্যের সমস্ত বড় ব্লকগুলি মুক্ত করতে হয়। তারপরে সমস্ত গ্রন্থাগারকে তাদের mallocকলগুলি প্রতিস্থাপন করতে হবে যার জন্য তারা এর freeমতো কিছু নিয়ে বিরক্ত করে না seq_mallocএবং লোড হওয়ার পরে বরাদ্দকৃত সমস্ত স্মৃতি মুক্ত করার জন্য seq_purgeএকটি atexitকলব্যাকে কল করে।

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

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

যাইহোক, খুব কমপক্ষে আমি ভ্যালগ্রাইন্ডে ফাঁসগুলি ফিল্টার করে ফেলতাম যাতে তারা কমপক্ষে আপনার নিজের দলের চিহ্নিত করার জন্য আপনার দলের দক্ষতার সাথে গোলযোগ না করে।


1
আমি ভাবছি যদি "নৌকো কোডিং" এর সাথে ফুটোটির কোনও যোগসূত্র থাকে?

0

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

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