|
|
|
как освободить cached memory?
|
|||
|---|---|---|---|
|
#18+
У меня дома wlan роутер со встроенным Линуксом. На нем обычно ~19Mb свободной оперативной памяти. Но после того как делаю какой-нибудь download с подключенного к нему usb-стика cached memory вырастает до ~18Mb, а свободная память стабилизируется где-то на уровне 1,5Mb. Вопрос в том можно ли не перегружая роутер освободить cached memory? версия ядра 2.4.20 (gcc version 3.2.3 with Broadcom modifications) Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2005, 01:47:23 |
|
||
|
как освободить cached memory?
|
|||
|---|---|---|---|
|
#18+
зачем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2005, 22:55:50 |
|
||
|
как освободить cached memory?
|
|||
|---|---|---|---|
|
#18+
Хрензачем? т.е. cached memory выделяется для процессов точно так же как и free memory? Я почему-то думал что cached memory это только кеш файловой системы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.04.2005, 23:57:46 |
|
||
|
как освободить cached memory?
|
|||
|---|---|---|---|
|
#18+
Это кэш файловой системы. Но если приложениям понадобится память, кэш будет автоматически урезан. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2005, 02:24:49 |
|
||
|
как освободить cached memory?
|
|||
|---|---|---|---|
|
#18+
Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.04.2005, 02:46:40 |
|
||
|
как освободить cached memory?
|
|||
|---|---|---|---|
|
#18+
Понятно, что cache будет урезан, а как же быть с buffers? Ведь он тоже занимает солидное место. Вообще кто может объяснить какие данные хранятся в buffers и может ли он автоматически урезаться при нехватки памяти остальным процессам? У меня, например, при 512 метров оперативки buffers занимает 141 Mb, а cached – 216 Mb. При загрузке системы эти цифры становятся меньше, но в тем не менее один раз в swap попало 92 Kb. Почему же cache не захотел поделится памятью? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2006, 17:22:04 |
|
||
|
как освободить cached memory?
|
|||
|---|---|---|---|
|
#18+
KraqПочему же cache не захотел поделится памятью? Именно потому что не успевает. Это самая гадкая вещь в Linux - работа с памятью. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2006, 17:23:41 |
|
||
|
как освободить cached memory?
|
|||
|---|---|---|---|
|
#18+
попробуй sync ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2006, 19:21:12 |
|
||
|
как освободить cached memory?
|
|||
|---|---|---|---|
|
#18+
Запустил sync. Вообще никаких изменений ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 16.10.2006, 19:38:55 |
|
||
|
как освободить cached memory?
|
|||
|---|---|---|---|
|
#18+
2Kraq В буфер попадает то, что должно быть записано на диск. Сама запись идет позже, но данные остаются в буфере, который начинает играть роль кеша... В твоем случае 141М давно записан, но если понадобиться эти данные прочитать, то они уже есть в памяти! Он может разрастаться при записи на медленное устройство (флешку например), если она смонтирована без флага write-throw(?). У меня запись 100М идет 3сек, показывает скорость 30М/сек, хотя флешка умеет около 5М/сек. Просто эти 100М сваливаются в память (предположим система выделила все 100, то есть память есть, слишком старые страницы кеша она грохнула, решив что ЭТА информация более актуальна. Если память занята и активно используется, 100 под буфер выделить не удается, чтож, будет 10М! И порциями по 10М данные валяться в буфер, а оттуда на флешку). На мой взгляд работа с памятью в линуксе сделана очень грамотно, аккуратно и красиво! Про своп. Эти твои 92К попали туда после пары дней аптайма, но никак не сразу, верно? Дело в менеджере памяти. Он сгружает туда самые старые страницы, страницы к которым дольше всего не было обращений. Разумеется есть приоритеты и, так сказать, весовые коэффициенты... Например кеш и буфер туда не попадают вообще и если надо делать выбор: засунуть в своп старую страницу с данными (rw) или грохнуть более новую страницу с кешем (но не совсем новую!), кешу не повезет :). Следом не повезет страницам с "секцией кода" (так раньше называлось, как сейчас - не в курсе), то есть тем, которые были загружены из .so или исполняемого файла и имют атрибут в памяти ro. Поскольку они не менялись со времени загрузки, их нет смысла записывать в своп, а потом читать. Можно просто грохнуть, а потом прочитать из нужного исполняемого файла. В твоем случае в своп уехал кусок какого-то неиспользумого демона, например контроля за ups. Система решила, что кусок вчерашнего кеша более актуален и востребован чем кусок демона к которому небыло обрашений уже 2 дня. И это правильно! Кстати, система нечасто очищает своп и корректирует размер. Зачем? Лишние обращения к диску... Если уж совсем приприпрет... Так что возможно твои 92К уже вернулись в память :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2006, 09:12:29 |
|
||
|
как освободить cached memory?
|
|||
|---|---|---|---|
|
#18+
Спасибо, Михаил0, ты окончательно прояснил принцип работы Linux с памятью. Получается, что если ОС долгое время не перегружать, то это приведёт к тому, что swap забьётся и далее, при скидывании новых данных в swap, сначала будут от туда удалятся наиболее неактуальные, а потом произойдёт собственно запись. Я верно понимаю? Если так, то IMHO это не очень эффективно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.10.2006, 17:59:51 |
|
||
|
как освободить cached memory?
|
|||
|---|---|---|---|
|
#18+
>Получается, что если ОС долгое время не перегружать, то это приведёт к тому, что swap забьётся и... Нет. Я к тому, что со временем своп может использоваться, хотя раньше (вчера/позавчера) он был не нужен, а нагрузка не менялась. Так эффективнее. Также со временем он может расти, но это происходит не вследствии утечек памяти или еще каких-нибудь гадостей, а по вполне объяснимым причинам: записала система в своп 1М, отметила это дело в файле (ведь своп это fs!), свои структуры в памяти заполнила чтобы знать где что лежит. Через какое-то время эти данные понадобились, система прочитала этот 1М. Теперь надо бы записать информацию в своп, что свободного места там стало больше, а занятого, соответственно меньше и тд. А зачем? Это совершенно ненужное обращение к диску. Потребовалось сгрузить в своп еще 1М. Можно к нему обратиться, посмотреть сколько и где места занято, там очень даже может быть фрагментация, найти свободный мегабайт и туда записать. Зачем такие сложности? Может отступить от начала свопа столько, сколько нужно чтобы попасть в гарантированно неиспользуемую область и туда записать несчастный мегабайт? Так будет быстрее. Но тулзы os будут говорить что используется уже 2М свопа, вводя пользователя в заблуждение. "Вот, у меня своп растет, как кончится тачке кирдык!" Не кончится. Система всетаки иногда делает "зачистку" свопа. Может даже дефрагментацию. Когда размер занятого достигает каких-то процентов от общего размера свопа или озу. >при скидывании новых данных в swap, сначала будут от туда удалятся наиболее неактуальные, а потом произойдёт собственно запись. Неактуальных данных в свопе нет! Надеюсь выше я объяснил это. Есть ощущение, что какие-то термины ты неправильно понимаешь... "Страница" -- страница памяти. Размер 4k. (Во всякой экзотике может быть другим). Менеджер памяти оперирует именно со страницами. Приложение об этом не знает и знать не должно. "кеш/буфер" -- область памяти (куча страниц) объединенные предназначением. Там храниться то, что недавно было прочитано с диска или ожидает записи на диск. "своп" -- партишн или файл на диске. По сути дополнительная память, только ме-е-едленная. Чтобы работа с ней шла побыстрее несколько изменен и, как следствие, усложнен алгоритм работы с ней. Чтение/запись идет все теми же страницами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.10.2006, 08:42:46 |
|
||
|
|

start [/forum/topic.php?fid=25&msg=34058412&tid=1488924]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
30ms |
get topic data: |
5ms |
get forum data: |
1ms |
get page messages: |
27ms |
get tp. blocked users: |
1ms |
| others: | 194ms |
| total: | 276ms |

| 0 / 0 |
