Вам нужно увеличить RAM и перейти на SSD…

…если вы всё ещё не сделали это.

aa96kc8ieoxiezfj-cxje_4_trk.jpeg


Задумывались ли вы, хватает ли вашему компьютеру, локальному или удалённому серверу оперативной памяти? Задумывались, но не знаете, как это определить? А накопители какого типа вы предпочитаете? Надеемся, данная статья поможет вам в этом разобраться.

▍ На что влияет объём оперативной памяти


Когда компьютеру нужно обработать данные, они помещаются в оперативную память и уже там с ними работает центральный процессор. Все запущенные программы и открытые в них файлы находятся в оперативной памяти компьютера. Таким образом, объём оперативной памяти влияет на то, сколько одновременно программ и насколько «тяжёлых» программ вы можете запустить и сколько одновременно и каких файлов (или, например, вкладок в браузере) вы можете открыть.
Как производительность диска влияет на быстродействие компьютера
Операционная система периодически выгружает на диск из памяти те данные, к которые давно не использовались. А когда происходит к ним обращение снова, операционная система помещает их обратно в память вместо выгруженных на диск неактивных данных. Для пользователя это выглядит следующим образом: вы переключаетесь на окно, к которому давно не обращались, и компьютер на некоторое время «подвисает». А в это время выгруженные из памяти данные считываются с диска и помещаются обратно в память. Насколько быстро это произойдёт, зависит в первую очередь от быстродействия диска, ведь именно он будет здесь являть узким местом (оперативная память всегда быстрее).

▍ Почему файл подкачки должен находиться на SSD


Чем быстрее накопитель, тем короче будет такое «подвисание». А какие накопители быстрые — твердотельные. Мнение о ненадёжности твердотельных накопителей бытует и поныне, и до сих пор можно встретить советы перенести файл подкачки на HDD. Делать так ни в коем случае нельзя. Во-первых, SSD имеют достаточную надёжность, чтобы использоваться в высоконагруженных системах, если это не китайские «ноунеймы». У всех ключевых производителей есть несколько линеек накопителей с разным гарантированным уровнем надёжности и всегда можно подобрать необходимый вариант. Как показывает практика, накопители ещё долгое время могут проработать и после исчерпания заявленного ресурса. Во-вторых, поверхность пластин жёстких дисков тоже подвержена износу (вот неожиданность!) и со временем падает время доступа к секторам, а с ним и скорость обмена данными вплоть до невозможности обратиться к этим данным вовсе. Т.е. люди, перемещая файл подкачки с SSD на HDD, сами себе делают работу на компьютере менее комфортной. Действенным способом снизить нагрузку на диск подкачкой и увеличить его ресурс является увеличение объёма оперативной памяти или изменение подхода к работе за компьютером: можно закрывать вкладки, файлы, и программы, которые вам больше не нужны или не понадобятся в ближайшее время, чтобы освободить память.

▍ Ключевое отличие SSD от HDD


Если мы посмотрим на разницу скорости линейных чтения и записи на HDD и SSD, окажется, что SSD с интерфейсом SATA превосходят HDD с таким же интерфейсом в среднем «лишь» в 2–3 раза, в то время как на мелко блочных операциях разница составляет десятки раз и именно в этом кроется ключевое отличие накопителей. Механически SSD устроены по-другому и не так важно, где находятся данные, ведь скорость прохождения сигнала к ячейкам SSD гораздо выше, чем время доступа к секторам HDD. С развитием накопителей роль фрагментации данных хоть и снизилась в вопросах производительности HDD, время доступа к разным секторам в силу технических особенностей накопителей данного типа сильно отличается, в то время как разница во времени доступа к ячейкам SSD ничтожно мала. Ещё и поэтому файл подкачки функционирует заметно быстрее, находясь на SSD. Много лет назад, когда SSD ещё не начали получать доступность на потребительском рынке, сильно ощущалась разница в производительности между дефрагментированным файлом подкачки и недефрагментированным. Помимо самого файла, фрагментированными могут быть и данные внутри файла, а на SSD фрагментация уже не играет такой роли. Кроме того, разница в скорости зависела даже от территориального расположения данных на пластине жёсткого диска, и чем дальше данные были от центра, тем быстрее они считывались. На SSD же неважно, где территориально находятся данные, и фрагментация оказывает не такое сильное влияние на производительность.

▍ Почему оперативной памяти должно быть достаточно


Операционная система стремится выгрузить из памяти неактивные данные, чтобы в оперативной памяти всегда оставалось место для новых (или вновь загруженных из файла подкачки) данных. Если оперативной памяти не хватает катастрофически, и данные в оперативной памяти практически «не остывают», то операционной системе приходится «судорожно» искать в памяти данные, которые можно выгрузить на диск, когда требуется разместить данные в оперативной памяти. Поэтому в такой ситуации вы будете ждать дважды: пока данные будут выгружены из памяти, плюс пока требуемые данные будут загружены.

▍ Как понять, хватает ли оперативной памяти


Оценить требуемый объём можно, понаблюдав, сколько памяти требуется вашему компьютеру.
В ОС Windows обратимся к диспетчеру задач, чтобы узнать, сколько сейчас всего используется (Committed) памяти
Это значение показывает, сколько данных находится в памяти, плюс сколько данных выгружено в файл подкачки. Его также можно получить следующим образом:

(Get-WmiObject  win32_operatingsystem | select @{L='commit';E={($_.TotalVirtualMemorySize - $_.FreeVirtualMemory)}}).commit


Значение будет в килобайтах. На вышеприведённом скриншоте мы видим, что используется 12.5 ГБ памяти, а всего памяти, включая файл подкачки — 26.4 ГБ. В системе 16 ГБ физической памяти, объём файла подкачки автоматически выбирается системой. Выходит, что объём файла подкачки составляет 60% от объёма физической памяти. Нужно ли бросаться расширять физическую память? Давайте понаблюдаем, как у нас меняется объём используемой памяти.
Мы написали скрипт, создающий задачу в Task Scheduler, которая каждый 15 минут получает значение Committed Memory и дописывает его в файл C:\Users\Public\Documents\commit.txt.
Выглядит он как-то так:

powershell.exe set-executionpolicy unrestricted
Set-Content -Path C:\Users\Public\Documents\get-commit.ps1 -Value "(Get-Date -Format 'yyyy-MM-dd HH:mm' )+`"``t`"+(Get-WmiObject  win32_operatingsystem | Select @{L='commit';E={(`$_.totalvirtualmemorysize - `$_.freevirtualmemory)}}).commit | Out-File C:\Users\Public\Documents\commit.txt -Append"
$action = New-ScheduledTaskAction -Execute "`"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe`"" -Argument "C:\Users\Public\Documents\get-commit.ps1"
$trigger = New-ScheduledTaskTrigger -Once -At 1am -RepetitionInterval (New-TimeSpan -Minutes 15)
$principal = New-ScheduledTaskPrincipal -UserID "NT AUTHORITY\SYSTEM" -LogonType ServiceAccount -RunLevel Highest
$settings = New-ScheduledTaskSettingsSet
$task = New-ScheduledTask -Action $action -Principal $principal -Trigger $trigger -Settings $settings
Register-ScheduledTask 'collect-commit' -InputObject $task


Вот фрагмент этого файла:

2023-05-03 10:15    6387512
2023-05-03 10:30    7986736
2023-05-03 10:45    8545776
2023-05-03 11:00    8540724
2023-05-03 11:15    8646144
2023-05-03 11:30    8726340
2023-05-03 11:45    8583972
2023-05-03 12:00    8898532
2023-05-03 12:15    8945512
2023-05-03 12:30    9749284
2023-05-03 12:45    9833264
2023-05-03 13:00    10605496


Представим данные из файла в виде графика
Как мы видим, большую часть времени система всё же «умещается» в отведённую память. Но нужно ли её расширить, так как иногда её не хватает? Если в работе это не заметно, то можно оставить всё как есть. Если доставляет дискомфорт, то остаётся ещё два выхода: либо всё-таки увеличить объём ОЗУ (но ведь это стоит денег), либо пересмотреть сценарии использования компьютера: закрывать ненужные более вкладки в браузере, файлы и окна программ. Если же это постоянно работающий сервер, то тут придётся пересматривать алгоритмы его работы, если можно доработать или перенастроить ПО, в противном случае придётся всё же добавлять память.
Про Windows выяснили, а в ОС Linux оценить использование памяти можно с помощью команды

free -t -h


Вывод будет примерно следующим:

               total        used        free      shared  buff/cache   available
Mem:           461Mi       129Mi       136Mi       0.0Ki       194Mi       319Mi
Swap:          1.0Gi       5.0Mi       1.0Gi
Total:         1.5Gi       135Mi       1.1Gi


Параметр -t добавляет строчку Total, на тот случай, если нам лень выполнять сложение (а нам, конечно же, лень). Параметр -h приводит значения к более удобным KiB, MiB и GiB. По умолчанию значения выводятся в килобайтах без указания величин.
Чтобы собрать статистику, можно поступить следующим образом.
Создаём файл с содержимым

#!/bin/bash
a=$(date +'%Y-%m-%d %H:%M')
b=$(free -t | awk -v RS="" '{print $20}')
echo $a$'\t'$b >> /home/used.txt


И сохраняем его, например, в /home/get-used.sh.
Добавляем в crontab строчку

*/15 * * * * /home/get-used.sh


Информация коллекционируется в /home/used.txt, содержимое которого выглядит так же, как у файла commit.txt, который мы создавали в Windows.
Мы пособирали информацию ещё на двух машинах и получили следующие данные.
В этих двух случаях объём физической памяти 2 ГБ и 512 МБ соответственно. Как мы видим, в случае 2 мы всё время «не умещаемся» в физическую память и её нужно увеличить на 1–2 ГБ.

▍ Вместо заключения


Мы не будем рассказывать, как выбрать правильный SSD или нужную память, это тема отдельной статьи. Хостеры виртуальных (VPS/VDS) серверов уже всё выбрали, вам всего лишь нужно изменить объём памяти вашего сервера и обратиться в техподдержку для перемещения вашего сервера на SSD, если вы всё ещё не сделали это.

Выиграй телескоп и другие призы в космическом квизе от RUVDS. Поехали?

© Habrahabr.ru