কীভাবে স্প্যামআস্যাসিন (স্প্যামড) মেমরির ব্যবহার হ্রাস করা যায়


15

আমি ডেবিয়ানে স্প্যামএস্যাসিন ব্যবহার করছি (পাইজার, এডাব্লুএল এবং বেইস অক্ষমযুক্ত ডিফল্ট কনফিগারেশন এবং সা-কম্পাইল সক্ষম), এবং স্প্যামযুক্ত প্রতিটি শিশু প্রক্রিয়া 32-তে প্রায় 100 থেকে 150MB মেমরি (প্রায় 50MB রিয়েল মেমোরি) গ্রাস করে বিট সার্ভার, এবং 64 বিট সার্ভারগুলিতে এটি দ্বিগুণ (যৌক্তিকভাবে যথেষ্ট)। সাধারণত দুটি শিশু প্রক্রিয়া থাকে তবে ব্যস্ত সময়ে পাঁচটি (সর্বাধিক) চলতে পারে।

ISTM যে 200 থেকে 600MB এই কাজের জন্য অনেক স্মৃতি। আমি আমার ফিল্টারিং কাঠামোর অংশ হিসাবে এসএ ব্যবহার চালিয়ে যেতে চাই, তবে এত স্মৃতির ন্যায্যতা প্রমাণ করা কঠিন হয়ে উঠছে।

প্রতিটি শিশু প্রক্রিয়া ব্যবহার করে এমন মেমরির পরিমাণ হ্রাস করার কোনও উপায় আছে কি? (বা বিকল্পভাবে, একটি একক শিশু প্রক্রিয়াটি এত তাড়াতাড়ি করুন যাতে আমি সর্বোচ্চ শিশুদের 2 এর মতো কিছুতে সেট করতে পারি)। আমি যে কোনও বিকল্প বিবেচনা করতে ইচ্ছুক, সেগুলি সহ যা সঠিকভাবে হ্রাস পাবে বা হতে পারে।

আমি ইতিমধ্যে SA উইকিতে "আউট অফ মেমরি সমস্যা" পৃষ্ঠাটি পড়েছি ; কিছুই কোন লাভ নেই। 5 এমবি এর চেয়ে বড় বার্তাগুলি এসএ দিয়ে স্ক্যান করা হয় না।


1
নোট করুন যে কাঁটা বাচ্চারা পিএস বা শীর্ষ শোয়ের সংখ্যার যোগফলের তুলনায় অনেক কম শারীরিক র‍্যাম ব্যবহার করতে পারে। এটি কাঁটা যখন অনুলিপি কৌশলটি কারণে।
ডেভিড স্মিট

উত্তর:


5

আমি মনে করি আপনি লিনাক্সের মেমোরি ব্যবহারের যেভাবে প্রতিবেদন করেছেন তা ভুল বুঝছেন। যখন একটি প্রক্রিয়া কাঁটাচামচ করে, তখন এটি দ্বিতীয় প্রক্রিয়াতে আসে যা মূল প্রক্রিয়াটির সাথে প্রচুর সংস্থান ভাগ করে দেয়। এতে অন্তর্ভুক্ত রয়েছে স্মৃতি। তবে লিনাক্স এর জন্য কপি অন রাইটিং (সিওডাব্লু) নামে পরিচিত একটি কৌশল ব্যবহার করে। এর অর্থ হ'ল প্রতিটি কাটা শিশু প্রক্রিয়া মেমরিতে একই প্রক্রিয়াটিকে মূল প্রক্রিয়া হিসাবে দেখতে পাবে, কিন্তু যখনই সেই ডেটা পরিবর্তন হয় (শিশু বা পিতামাতার দ্বারা), পরিবর্তনগুলি অনুলিপি করা হয় এবং কেবল তখনই কোনও নতুন অবস্থানের দিকে নির্দেশ করে।

প্রক্রিয়াগুলির মধ্যে একটির সেই ডেটাতে পরিবর্তন না হওয়া পর্যন্ত তারা একই অনুলিপি ভাগ করে নিচ্ছে। ফলস্বরূপ, আমার কাছে এমন একটি প্রক্রিয়া থাকতে পারে যা 100MB র‌্যাম ব্যবহার করে এবং 10 বার এটি কাঁটাচামচ করে। এই ফোরকড প্রসেসগুলির মধ্যে প্রতিটি র‌্যামের 100MB ব্যবহার করা দেখানো হবে, তবে আপনি বাক্সে মেমরির সামগ্রিক ব্যবহারের দিকে নজর দিলে এটি কেবল দেখায় যে র‌্যামের ১৩০ এমবি ব্যবহার করা হচ্ছে (প্রসেসগুলির মধ্যে ১০০ এমবি ভাগ করা, আরও কয়েক এমবি ওভারহেড) , প্লাস্টিকের জন্য আরও কয়েক ডজন এমবি বা দুটি)।

চূড়ান্ত উদাহরণ হিসাবে, আমার কাছে এখনই একটি বাক্স আছে 30 টি অ্যাপাচি প্রক্রিয়া চলছে। প্রতিটি প্রক্রিয়াটিতে র্যামের 22MB ব্যবহার দেখানো হচ্ছে। যাইহোক, আমি যখন আমার সামগ্রিক র‍্যাম ব্যবহার দেখানোর জন্য ফ্রি-এম চালাই তখন আমি পাই:

topher@crucible:/tmp$ free -m
             total       used       free     shared    buffers     cached
Mem:           349        310         39          0         24         73
-/+ buffers/cache:        212        136
Swap:          511         51        460

আপনি দেখতে পাচ্ছেন, এই বাক্সে 30 টি প্রসেস চালানোর জন্য পর্যাপ্ত পরিমাণে র্যাম নেই যা প্রতিটি "বাস্তব" র‌্যামের 18 এমবি ব্যবহার করে। আপনি যদি আক্ষরিকভাবে র‌্যামের বাইরে চলে না যান বা আপনার অ্যাপগুলি প্রচুর পরিমাণে অদলবদল না করে, আমি বিষয়গুলি নিয়ে চিন্তা করব না।

আপডেট: এছাড়াও, এই টুল নামক খুঁজে বার করো smem দ্বারা উল্লেখ করা হয়েছে, jldugger লিনাক্স মেমোরি ব্যবহার আরেকটি প্রশ্নের উত্তরে এখানে


1
আমি আক্ষরিকভাবে র‌্যামের বাইরে চলে যাচ্ছি, সুতরাং এ সম্পর্কে আমার চিন্তা করার দরকার নেই। তবে এটি এমন হতে পারে যে এটি অন্যান্য প্রক্রিয়াগুলি যা র‌্যাম গ্রহণ করছে এবং এসএ এতটা ব্যবহার করছে না using
টনি মায়ার

আমার পর্যবেক্ষণ এবং গন্ধযুক্ত সরঞ্জামটি ব্যবহার করে , দেখে মনে হচ্ছে স্প্যামাস্যাসিন প্রায় 50 এমবি র‌্যাম ব্যবহার করে এবং আপনি যদি এটি একাধিক প্রক্রিয়াতে কাঁটাচামচ করেন তবে তাদের সমস্ত মেমরি ভাগ করা মেমরির, তাই এটি এখনও প্রায় 50 এমবি র‌্যাম ব্যবহার করবে সমস্ত প্রক্রিয়াগুলির মধ্যে, যদিও পিএস প্রতিবেদনের প্রত্যেকেরই 50 এমবি এর আরএসএস প্রতিবেদন করে। YMMV।
thomasrutter

1

সা-সংকলন ব্যবহার করে আপনি অনেকগুলি নিয়মের মিলের গতি উন্নত করতে সক্ষম হতে পারেন।


দুঃখিত, আমি প্রশ্নটিতে উল্লেখ করা উচিত ছিল যে আমি ইতিমধ্যে সা-সংকলন ব্যবহার করছি। যদিও ভাল পরামর্শ।
টনি মায়ার

1

আমি যা করেছি তা এখানে।

আমার একটি সেট আপ আছে যেখানে একই সাথে প্রচুর বার্তা মোটামুটি বিতরণ করা হয়; একাধিক পরীক্ষার জন্য আমি বার্তাগুলিতে এসএ চালাচ্ছি যা অস্থায়ী স্পুলে অনুলিপি করা হয় এবং তারপরে প্রতি পাঁচ মিনিটে ক্রোন জব দ্বারা সরবরাহ করা হয়।

spamd "সম্ভবত আপনার সর্বোচ্চ-শিশুদের প্যারামিটারটি বাড়ানো উচিত" মুদ্রণ অব্যাহত থাকবে এবং আমি এটি এক পর্যায়ে 40-এ উন্নীত করেছিলাম, তবে আমার কাছে সার্ভারটি তার সমস্ত অদলবদ স্থান গ্রাস করে ক্র্যাশ করেছে।

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

LINEBUF=10240

# Grab last digit of PID for lockfile
PID=$$
:0
* PID ?? ()\/[0-9]$
{ D=$MATCH }
:0
* > 512000
{ SA="(too large)" }
:0Ew:/tmp/20spamc.$D
SA=| spamc -p 38783 -l -y

এছাড়াও, আমি spamdঅনেকগুলি ulimitসীমাবদ্ধতা দিয়ে শুরু করি । আমি নিষেধাজ্ঞা সরিয়ে ব্যতীত নম্বরগুলি http://svn.apache.org/repos/asf/spamassassin/trunk/contrib/run-masses থেকে নেওয়া হয়েছিল ulimit -u। (কী হচ্ছে তা নিশ্চিত নয় 32 32 যে কোনও ইভেন্টে খুব ছোট। 500 এর মতো কিছু দিয়ে আমি spamdকিছুক্ষণ দৌড়াতে পারতাম , তবে শেষ পর্যন্ত সীমাতে চলেছিলাম))

ulimit -v 204800
ulimit -m 204800
ulimit -n 256
#ulimit -u 32

perl -T -I lib -w spamd --min-children 2 --max-children 10 --max-spare 5 etc etc

আমার ধারণা, বর্ধিত সময়ের জন্য বোঝা খুব বেশি হলে ডেলিভারি ব্যর্থতাগুলি শেষ করব, তবে এখন পর্যন্ত মনে হচ্ছে আমি এটিকে দিয়ে ম্যানেজেবল স্তরে লোড কমাতে সক্ষম হয়েছি; অদলবদল হয়ে যাওয়া মেশিনের চেয়ে ব্যর্থ বিতরণগুলির একটি গুচ্ছটি এখনও অনেক ভাল।


0

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

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

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


সম্পর্কিত নোটটিতে, আমি চালিত বেশ কয়েকটি সার্ভারের উপর dspam এর পক্ষে SA কে গভীরভাবে বিবেচনা করার বিষয়ে আমি গুরুত্ব সহকারে বিবেচনা করছি, কারণ ডিএসপিএএম অভিযোগ করেছে যে কম ক্ষুধার্ত রয়েছে।
ডেভিড উত্তর

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

0

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

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