ایجاد یک فایل مبادله - یا نحوه مقابله با کمبود حافظه موقت

ساخت وبلاگ

Creating a swap space file

یکی از نقاط عطف در توسعه سیستم عامل ها ، مجازی سازی حافظه بود. این امکان را به فرآیندهای موجود در سیستم می دهد تا حافظه را به عنوان یک منطقه مداوم که در دسترس آنها است ، "ببینند". گسترش طبیعی توانایی مجازی سازی حافظه ، نگه داشتن صفحات حافظه نه تنها در حافظه کار (RAM) ، بلکه حذف و بارگذاری آنها از دستگاه های بلوک (مانند دیسک) است. در مقاله امروز ما به ایجاد یک فایل مبادله ای خواهیم پرداخت که در یکی از دیسک های سیستم ما ساکن خواهد بود.

یکی از مشکلاتی که توسعه دهندگان ممکن است هنگام ساختن برنامه های "سنگین وزن" مانند سرورهای دات نت یا پایگاه داده با آن روبرو شوند ، از حافظه خارج می شود. ورود به سیستم زیر در قالب بافر حلقه هسته در قالب ظاهر می شود:

[زمان] خارج از حافظه: فرآیند کشته شده PID (پردازش_ نام) # اطلاعات بیشتر در مورد حافظه [TIME] OOM_REAPER: PID فرآیند برداشت شده (Process_Name) ، اکنون Anon-RSS: 0KB ، File-RSS: 0KB ، SHMEM-RSS: 0KB

یک نمونه نمونه به این شکل است:

[227711. 146660] خارج از حافظه: فرآیند کشته شده 842395 (cc1plus) Total-VM: 3291904KB ، anon-rss: 2984768KB ، File-rss: 0kb ، shmem-rss: 0kb ، uid: 1001 pgttable: 768kore: 768kore: فرآیند برداشت شده 842395 (cc1plus) ، اکنون anon-rss: 0kb ، پرونده-rss: 0kb ، shmem-rss: 0kb

این پدیده به طور کلی با ساخت موازی سازی همراه است ، هنگامی که ، به عنوان مثال 32GIB رم برای 16 هسته CPU منطقی وجود دارد ، که ممکن است مقدار کافی از حافظه عملیاتی باشد. علاوه بر این ، هنگام خرید یک ماشین قدرتمندتر ، آسان تر می توان وسوسه شد تا حجم کارهایی را که می تواند انجام دهد افزایش دهد. این کار می تواند به عنوان مثال با تنظیم واحدهای اجرای بیشتر ، افزایش حداکثر بار یا مقدار دیگری در راه حل هایی که ساخت پروژه اتوماتیک را انجام می دهند ، انجام شود. امروزه از فضای مبادله به ندرت استفاده می شود ، و قوانین قدیمی در مورد اندازه آن به نفع رها کردن آن به طور کلی بیرون رانده شده است. با این حال ، در این مقاله فرض می کنیم که سیستمی که ما در آن کار می کنیم در یک پارتیشن جداگانه حافظه مبادله ای ندارد یا از آن بسیار کمی دارد.

در چنین موارد خاص ، یک پرونده مبادله ، که می توانیم به طور موقت یا به طور دائم از آن استفاده کنیم ، می تواند کمک کند. این روند در زیر شرح داده شده است.

ایجاد یک منطقه مبادله حافظه در یک پرونده

ایجاد یک فایل مبادله شامل موارد زیر است:

  1. ایجاد یک فایل پر از صفرها.
  2. دادن مجوزهای ایمن پرونده.
  3. با استفاده از دستور MKSWAP برای ایجاد ساختارهای قابل کنترل مناسب برای هسته.
  4. افزودن پرونده مبادله موقت به فضاهای مبادله فعال/استفاده شده.
  5. در صورت لزوم ، پرونده مبادله را به طور دائم نصب کنید ، یا در صورت نیاز دیگر آن را از بین ببرید.

با وجود ظاهر ، نکته اول چندان واضح نیست. در مثال Man 8 MKSWAP از دستور Fallocate برای ایجاد پرونده مبادله استفاده شد. نحو آن دوستانه تر از نحو برنامه DD باستان است. با این حال ، این یک اشکال اساسی دارد-ممکن است به درستی روی سیستم های پرونده ext4 ، xfs یا btrfs کار نکند-یعنی محبوب ترین موارد :-) این به دلیل مکانیسم هایی مانند prealLocation و گاو (کپی بر روی نوشتن) است. بنابراین شما باید سیستم فایل را وادار کنید که در واقع تخصیص یابد ، زیرا هسته لینوکس به جای استفاده از انتزاعی که توسط VFS (سیستم فایل مجازی) ارائه شده است ، از دسترسی مستقیم به فایل استفاده می کند.

# ایجاد پرونده 1gib myswapfile sudo dd if =/dev/Zero of =/mySwapFile bs = 1m count = 1024

پرونده مبادله فقط باید توسط root user خوانده و نوشته شود. خواندن آن توسط سایر کاربران ممکن است منجر به نشت داده هایی شود که به فضای مبادله نوشته شده است. بنابراین ، دستور باید روی آن انجام شود:

sudo chown 600 /swapfile

مرحله سوم ایجاد ساختار مناسب است که توسط هسته برای مدیریت پرونده یا پارتیشن مبادله استفاده می شود. می توانید پرونده را قبل و بعد از استفاده مقایسه کنید.

[[ایمیل محافظت شده]~] $ xx d-l 100 /swapfile 0000000: 0000 0000 0000 0000 0000 0000 0000 0000. 0000010: 0000 0000 0000 0000 0000 0000 0000 0000. 0000020: 0000 0000 0000 0000 0000 0000 0000 0000. 0000030: 0000 0000 0000 0000 0000 0000 0000 0000. 0000040: 0000 0000 0000 0000 0000 0000 0000 0000. 0000050: 0000 0000 0000 0000 0000 0000 0000 0000.(.)

علاقه مندان می توانند ببینند که اطلاعات دیگری از صفر وجود ندارد:

[[ایمیل محافظت شده]~] $ xxd /swapfile |fgre p-v '.'

سپس دستور SUDO MKSWAP /SWAPFILE را اجرا کنید و محتوای آن را با استفاده از FGREP (یا GRE P-F) فیلتر کنید.

[[ایمیل محافظت شده]~] $ sudo mkswap /swapfile [[ایمیل محافظت شده]~] $ xxd /swapfile |fgre p-v '.'0000400: 0100 0000 FFFF 0300 0000 0000 37C4 1595. 7. 0000410: CB34 4A42 8B23 1C82 4A8E 10BC 0000 0000 . 4JB.#.. j. 0000ff0: 0000 0000 0000 5357 4150 5350 4143 4532. swapspace2

The structure created for the keel is not impressive. However, there is a curiosity here. The mkswap does not overwrite the first block of data, as there may be information such as the bootloader (in older computers, booting was multi-stage and used the MBR [Master Boot Record]) or the partition table. From there, it is only after the offset (8192 bits > 1024 bytes >1KIB [000400 در شش ضلعی))) که داده ها ظاهر می شوند. این اتفاقاً مطابق با اتحادیه SWAP_HEADER موجود در کد منبع لینوکس است. اتحادیه ساختاری در C است که بسته به متن ، می تواند متفاوت تفسیر شود ، یعنی حاوی داده های مختلفی است.

// https://github. com/torvalds/linux/blob/master/include/linux/swap. h اتحادیه SWAP_HEADERشعبده بازي؛ساختارinfo;>;

مرحله بعدی استفاده از دستور Swapon است. پس از بررسی مجوزها ، تماس با سیستم با همین نام برقرار می کند. در اینجا یک کنجکاوی دیگر وجود دارد - فرض بر این است که لینوکس می تواند 32 فضای مبادله داشته باشد. با این حال ، به گفته Man 2 Swapon:

در تعداد پرونده های مبادله ای که ممکن است مورد استفاده قرار گیرند ، محدودیت بالایی وجود دارد که توسط هسته ثابت max_swapfiles تعریف شده است. قبل از هسته 2. 4. 10 ، max_swapfiles مقدار 8 را دارد. از زمان هسته 2. 4. 10 ، مقدار 32 را دارد. از زمان هسته 2. 6. 18 ، اگر هسته با گزینه Config_Migration ساخته شود ، محدودیت 2 (بنابراین: 30) کاهش می یابد (که دو ورودی جدول مبادله را برای ویژگی های مهاجرت صفحه ذخیره می کند. از mbind (2) و migrate_pages (2)). از آنجا که هسته 2. 6. 32 ، اگر هسته با گزینه config_memory_failure ساخته شود ، حد بیشتر کاهش می یابد.

در حقیقت ، مستندات حاوی خطایی است. این امر به این دلیل است که گزینه Configration Confermation Config_device_private را در نظر نمی گیرد ، که برای هسته از 4. 14 تا 5. 13 تفریق 2 ، و برای هسته از 5. 14 به بعد - این 4 فضای مبادله ممکن را کم می کند. این بدان معنی است که برای هسته های لینوکس شرکت در صورت استفاده از هسته جدیدتر (مانند هسته-میلی لیتر) 27 یا 25 خواهد بود. این مشاهدات ، به همراه یک پچ ، توسط ما به لیست پستی پرونده Man Linux Man گزارش شده است: https://marc. info/؟l=linux-man& m=164245800929084& w=2. پس از بازنویسی ، پذیرفته شد ، به طوری که آخرین نسخه مستندات هسته شامل اطلاعاتی در مورد تأثیر Config_Device_Private در حداکثر تعداد پرونده ها/پارتیشن های مبادله است.

برای بررسی اینکه چه تعداد پرونده یا پارتیشن مبادله را می توان بر روی سیستم نصب کرد ، می توانید از اسکریپت زیر استفاده کنید:

بازگشت به موضوع اصلی - فعال کردن پرونده مبادله ساده است و فقط به دستور نیاز دارد:

sudo swapon/path/to/file

هنگامی که ما با پرونده مبادله انجام شد ، می توانیم آن را از فضای مبادله هسته خارج کنیم و آن را حذف کنیم:

sudo swapoff/path/to/file sudo rm/path/to/file

یا آن را در جدول سیستم فایل /etc /fStab تایپ کنید تا همیشه از آن استفاده شود:

echo "/path/to/file none swap defaults 0 0" |sudo te e-a /etc /fstab

فیلمنامه نهایی

خط زیر برای افزودن swapfile به fStab # echo "$ swap_file none swap defaults 0 0" |sudo te e-a /etc /fstab

خلاصه

اگرچه عنوان مقاله ممکن است موضوعی نسبتاً پایین را برای مدیران لینوکس نشان دهد ، اما ما به شدت به اعماق آن رفته ایم. از توضیح دلایل استفاده از دستور DD به جای سقوط ، تا دیدن ساختار مبادله روی دیسک ، نگاه کردن به منابع هسته سیستم ، تأیید جبران (جبران) مورد استفاده ، برای یافتن خطایی در مستندات و نوشتن یک پچبرای پرونده های مرد هسته لینوکس.

نویسندگان

مقالات وبلاگ توسط افراد تیم یورولینوکس نوشته شده است. ما 80 ٪ از مطالب را به توسعه دهندگان خود مدیون هستیم ، بقیه توسط بخش فروش یا بازاریابی تهیه می شود. ما تمام تلاش خود را می کنیم تا اطمینان حاصل کنیم که محتوا از نظر محتوا و زبان بهترین است ، اما ما معصوم نیستیم. اگر هر چیزی را که باید اصلاح یا روشن شود ، می بینید ، دوست داریم از شما بشنویم.< Pan> اگرچه عنوان مقاله ممکن است موضوعی نسبتاً سطح پایین را برای مدیران لینوکس نشان دهد ، اما ما به شدت به اعماق آن رفته ایم. از توضیح دلایل استفاده از دستور DD به جای سقوط ، تا دیدن ساختار مبادله روی دیسک ، نگاه کردن به منابع هسته سیستم ، تأیید جبران (جبران) مورد استفاده ، برای یافتن خطایی در مستندات و نوشتن یک پچبرای پرونده های مرد هسته لینوکس.

سیگنال های تجاری...
ما را در سایت سیگنال های تجاری دنبال می کنید

برچسب : نویسنده : عبدالله بوتیمار بازدید : <-PostHit-> تاريخ : دوشنبه 9 مرداد 1402 ساعت: 14:13