Как узнать кто пожирает память?
От: Holms США  
Дата: 27.04.12 03:04
Оценка: 1 (1)
Как такое может быть?




Происходит это при простом копировании большого файла (25 Гб) с данного сервера на другой комп.
Система: Win Server x64 2008 R2

Идеи?
спасибо
... << RSDN@Home 1.2.0 alpha 5 (M4) rev. 1510>>

27.04.12 21:56: Перенесено модератором из 'Железо' — AndrewVK
The life is relative and reversible.
Re: Как узнать кто пожирает память?
От: akasoft Россия  
Дата: 27.04.12 04:01
Оценка:
Здравствуйте, Holms, Вы писали:

H>Происходит это при простом копировании большого файла (25 Гб) с данного сервера на другой комп.


Чем именно копируется большой файл?
Что это за большой файл, характер информации и её изменения, пока идёт копирование?

Для мониторинга больше подойдёт Sysinternals с его procexp и procmon с фильтрами.

H>Идеи?


Антивирусы? Иной мониторинг на-лету.
Физической оперативки 8Г? А файл подкачки фиксированный?
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>> SQL Express 2012
Re[2]: Как узнать кто пожирает память?
От: Holms США  
Дата: 27.04.12 06:30
Оценка:
Здравствуйте, akasoft, Вы писали:

A>Чем именно копируется большой файл?

Windows Explorer, Copy-Paste (но копируется с сервера, а не на сервер)
A>Что это за большой файл, характер информации и её изменения, пока идёт копирование?
BlueRau movie rip

A>Для мониторинга больше подойдёт Sysinternals с его procexp и procmon с фильтрами.

ok

A>Антивирусы? Иной мониторинг на-лету.

на сервере нету антивируса
A>Физической оперативки 8Г? А файл подкачки фиксированный?
да 8Г. ага
... << RSDN@Home 1.2.0 alpha 5 (M4) rev. 1510>>
The life is relative and reversible.
Re: Как узнать кто пожирает память?
От: garant  
Дата: 27.04.12 09:10
Оценка:
27.04.2012 7:04, Holms написал:

> Происходит это при простом копировании большого файла (25 Гб) с данного сервера на другой комп.

> Система: Win Server x64 2008 R2

Файловая система NTFS же?

На работе боролись с проблемой, копирование большого файла падает.

Вскрылись интересные подробности из жизни NTFS, если коротко — в NTFS
есть ограничения на предельный уровень фрагментации очень длинных
файлов. При его превышении попытки записи в файл будут обламываться с
ошибкой:

Windows Vista или более поздних версиях Windows
STATUS_FILE_SYSTEM_LIMITATION Не удалось завершить запрошенную операцию
из-за ограничения файловой системы

Версии Windows, более ранних, чем Windows Vista
STATUS_INSUFFICIENT_RESOURCES существует недостаточно системных ресурсов
для завершения операции

http://support.microsoft.com/kb/967351
http://support.microsoft.com/kb/957065
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Как узнать кто пожирает память?
От: MShura  
Дата: 27.04.12 10:24
Оценка:
G>На работе боролись с проблемой, копирование большого файла падает.

G>Вскрылись интересные подробности из жизни NTFS, если коротко — в NTFS

G>есть ограничения на предельный уровень фрагментации очень длинных
G>файлов. При его превышении попытки записи в файл будут обламываться с
G>ошибкой:

Вы забыли уточнить очень важную особенность:
предел в ntfs.sys существует только для сжатых или sparse файлов

Причем если такой файл создать сторонним драйвером или утилитами, то XP падает в синий экран при попытке открыть такой файл. Win7 не открывает такой файл.
С точки зрения chkdsk на этом томе ошибок нет

Вот немного чисел из моей практики:
Нормальные файлы поддерживаются ntfs.sys даже если в них несколько сот тысяч фрагментов
sparse файл роняет XP уже при ~20 тыс фрагментах

Но к теме это не имеет отношения
Re[3]: Получить фрагменты просто
От: akasoft Россия  
Дата: 27.04.12 16:17
Оценка:
Здравствуйте, MShura, Вы писали:

MS>Вот немного чисел из моей практики:

MS>Нормальные файлы поддерживаются ntfs.sys даже если в них несколько сот тысяч фрагментов
MS>sparse файл роняет XP уже при ~20 тыс фрагментах

Хочу добавить, что получить десятки тысяч фрагментов довольно легко. Windows сама это делает, и нет бы оптимизировать этот процесс как-то, кроме как заказом файла большого размера, а потом его заполнением.
Достаточно поархивировать (rar, 7z) что-то приличное на несколько гигабайт, или закачать пару образов без резерврования места под файл (если резервировать, то обычно всё куда лучше, есть такая настройка в закачках). Тот же utorrent обычно резервирует, что и повышает его производительность.
Любые логи — наша смерть. Только успевай дефрагментировать.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>> SQL Express 2012
Re[3]: Как узнать кто пожирает память?
От: akasoft Россия  
Дата: 27.04.12 16:17
Оценка:
Здравствуйте, Holms, Вы писали:

A>>Чем именно копируется большой файл?

H>Windows Explorer, Copy-Paste (но копируется с сервера, а не на сервер)

Не понял выделенное. С сервера — это откуда? С шары? Где запускается Проводник, который копирует?

H>да 8Г.


Маловато.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>> SQL Express 2012
Re[4]: Как узнать кто пожирает память?
От: Holms США  
Дата: 27.04.12 17:47
Оценка:
Здравствуйте, akasoft, Вы писали:

H>>Windows Explorer, Copy-Paste (но копируется с сервера, а не на сервер)


A>Не понял выделенное. С сервера — это откуда? С шары? Где запускается Проводник, который копирует?

НА машине клиент запускаем explorer и через шару копируем файл с сервера. т.е. на самом сервере клиент ничего не дедает.

A>Маловато.

да текущих задач более чем достаточно, всегда ~60% свободно, кроме когда пользователи начинают копировать большие файлы.
... << RSDN@Home 1.2.0 alpha 5 (M4) rev. 1510>>
The life is relative and reversible.
Re: Как узнать кто пожирает память?
От: __kot2  
Дата: 27.04.12 18:01
Оценка:
Здравствуйте, Holms, Вы писали:
H>Идеи?
H>спасибо
да это этот superfetch и еще какая-то ерунда кэширует последние открытые тобой файлы. нужно службы их отключить
Re[5]: Как узнать кто пожирает память?
От: sdf
Дата: 27.04.12 18:07
Оценка:
Здравствуйте, Holms, Вы писали:

H>Здравствуйте, akasoft, Вы писали:


H>>>Windows Explorer, Copy-Paste (но копируется с сервера, а не на сервер)


A>>Не понял выделенное. С сервера — это откуда? С шары? Где запускается Проводник, который копирует?

H>НА машине клиент запускаем explorer и через шару копируем файл с сервера. т.е. на самом сервере клиент ничего не дедает.

A>>Маловато.

H>да текущих задач более чем достаточно, всегда ~60% свободно, кроме когда пользователи начинают копировать большие файлы.

Что за диски стоят на сервере (RAID etc)? Как настроено кеширование? Пробовали его выключать и смотреть на влияние его на проблемы с памятью?
Re: Как узнать кто пожирает память?
От: alexzz  
Дата: 27.04.12 19:58
Оценка:
Здравствуйте, Holms, Вы писали:

H>Как такое может быть?


Было такое несколько раз на обычной Windows 7 x64. Один раз, помню, когда DVD-болванки записывал. Ещё раз, когда ставил какую-то игрушку, и когда установщик отработал, память осталась занята. Если посмотреть закладку «память» в мониторе ресурсов, то видно, что потерянные гигабайты лежат в modified-списке, т.е. они уже не принадлежат никакому процессу и ожидают записи куда-нибудь на диск (которая, кстати, не происходит, и поэтому занятая память никогда не освободится). По логике работы Windows с памятью такое просто никогда не должно было произойти. Глюк абсолютно непонятный, как лечить ― неизвестно.
Re: Как узнать кто пожирает память?
От: Neco  
Дата: 27.04.12 20:01
Оценка: 3 (1) +1
Здравствуйте, Holms, Вы писали:

H>Происходит это при простом копировании большого файла (25 Гб) с данного сервера на другой комп.

H>Система: Win Server x64 2008 R2
H>Идеи?
попробуй xcopy /j

http://blogs.technet.com/b/askperf/archive/2007/05/08/slow-large-file-copy-issues.aspx
http://blog.mischel.com/2008/10/14/copying-large-files-on-windows/
http://blog.mischel.com/2011/06/07/windows-file-copy-bug-revisited/
всю ночь не ем, весь день не сплю — устаю
Re[6]: Как узнать кто пожирает память?
От: Holms США  
Дата: 27.04.12 21:23
Оценка:
Здравствуйте, sdf, Вы писали:

sdf>Что за диски стоят на сервере (RAID etc)? Как настроено кеширование? Пробовали его выключать и смотреть на влияние его на проблемы с памятью?

обычные диски на 1Тб, без RAID. Кеширование никто не настраивал, всё стоит по умолчанию. Как его отключить?
... << RSDN@Home 1.2.0 alpha 5 (M4) rev. 1510>>
The life is relative and reversible.
Re[2]: Как узнать кто пожирает память?
От: Holms США  
Дата: 27.04.12 21:28
Оценка:
Здравствуйте, __kot2, Вы писали:

__>да это этот superfetch и еще какая-то ерунда кэширует последние открытые тобой файлы. нужно службы их отключить


здесь говорят что superfetch по умолчанию не включен.

Проверил у себя в registry, ключей для superfecth нету, так что здесь всё нормально imho.
... << RSDN@Home 1.2.0 alpha 5 (M4) rev. 1510>>
The life is relative and reversible.
Re[7]: Как узнать кто пожирает память?
От: alexzz  
Дата: 27.04.12 21:46
Оценка:
Здравствуйте, Holms, Вы писали:

H>Здравствуйте, sdf, Вы писали:


sdf>>Что за диски стоят на сервере (RAID etc)? Как настроено кеширование? Пробовали его выключать и смотреть на влияние его на проблемы с памятью?

H>обычные диски на 1Тб, без RAID. Кеширование никто не настраивал, всё стоит по умолчанию. Как его отключить?

Если бы гигабайты застряли в системном кэше, то поле Cached об этом явно бы говорило. Судя по тому, что Cached не велико, а «доступной» памяти очень мало, а «свободной» нет вообще, гигабайты застряли или в рабочем наборе какого-то процесса или в modified-страницах. В рабочих наборах их нет, значит, посмотри ещё колонку Private bytes в диспетчере задач. Если гигабайты найдутся ― хорошо, если опять не найдутся, значит это именно та проблема, с которой я сталкивался.

Интересно, может ли так бесследно тырить память какой-нибудь драйвер? А если да, то куда смотреть, чтобы этот драйвер найти.
Re[7]: Как узнать кто пожирает память?
От: sdf
Дата: 27.04.12 21:54
Оценка:
Здравствуйте, Holms, Вы писали:

H>Здравствуйте, sdf, Вы писали:


sdf>>Что за диски стоят на сервере (RAID etc)? Как настроено кеширование? Пробовали его выключать и смотреть на влияние его на проблемы с памятью?

H>обычные диски на 1Тб, без RAID. Кеширование никто не настраивал, всё стоит по умолчанию. Как его отключить?

Похоже на известный баг с копированием больших файлов через CopyFie.
Если вы контроллируете софт, который делает копирование, сделатй так, чтобы он не использовал буфферизацию

Внутри ссвоих программ можно использовать CopyFileEx с указанным COPY_FILE_NO_BUFFERING.

Если задача стоит просто скопировать файл — xcopy c unbuffered I/O (ключ /J)
Re[8]: Как узнать кто пожирает память?
От: Holms США  
Дата: 27.04.12 22:00
Оценка:
Здравствуйте, sdf, Вы писали:

sdf>Похоже на известный баг с копированием больших файлов через CopyFie.

sdf>Если вы контроллируете софт, который делает копирование, сделатй так, чтобы он не использовал буфферизацию
Windows Explorer копирует, его не проконтролируешь.

sdf>Если задача стоит просто скопировать файл — xcopy c unbuffered I/O (ключ /J)

Надо попробовать через Far Manager.
... << RSDN@Home 1.2.0 alpha 5 (M4) rev. 1510>>
The life is relative and reversible.
Re[9]: Как узнать кто пожирает память?
От: sdf
Дата: 27.04.12 23:22
Оценка:
Здравствуйте, Holms, Вы писали:

sdf>>Если задача стоит просто скопировать файл — xcopy c unbuffered I/O (ключ /J)

H>Надо попробовать через Far Manager.
Far Maanger надо правильно настроить — снять галку с "Use System Copy Routine", но вообще xcopy /j есть везде, где есть explorer, его проще использовать для проверки.
Re[10]: Как узнать кто пожирает память?
От: Философ Ад http://vk.com/id10256428
Дата: 27.04.12 23:52
Оценка:
Здравствуйте, sdf, Вы писали:

sdf>но вообще xcopy /j есть везде, где есть explorer, его проще использовать для проверки.

  Скрытый текст

C:\>xcopy /?
Копирование файлов и дерева папок.

XCOPY source [destination] [/A | /M] [/D[:date]] [/P] [/S [/E]] [/V] [/W]
[/C] [/I]

[/F] [/L] [/G] [/H] [/R] [/T] [/U]
[/K] [/N] [/O] [/X] [/Y] [/-Y] [/Z]
[/EXCLUDE:file1[+file2][+file3]...]

source Указывает файл для копирования.
destination Указывает размещение и имя новых файлов.
[/q]

C:\>xcopy /j c:\results.txt c:\2.txt
Недопустимый ключ — "/j"

C:\>


ЧЯДНТ?
Всё сказанное выше — личное мнение, если не указано обратное.
Re[11]: Как узнать кто пожирает память?
От: sdf
Дата: 28.04.12 00:13
Оценка:
Здравствуйте, Философ, Вы писали:
Ф>ЧЯДНТ?

c:\>ver

Microsoft Windows [Version 6.1.7601]

c:\>xcopy /? | grep J
/J Copies using unbuffered I/O. Recommended for very large files.


Видимо, у вас старая винда и в ней старый xcopy. У топикстартера вроде на сервере Windows 2008 R2, я предполагал, что на клиенте тоже.
Re[2]: Как узнать кто пожирает память?
От: aspb  
Дата: 28.04.12 03:16
Оценка:
Здравствуйте, __kot2, Вы писали:

__>да это этот superfetch и еще какая-то ерунда кэширует последние открытые тобой файлы. нужно службы их отключить


В Windows Server 2008 R2 superfetch'а нет и его там даже невозможно включить.
Re[10]: Как узнать кто пожирает память?
От: akasoft Россия  
Дата: 28.04.12 03:43
Оценка:
Здравствуйте, sdf, Вы писали:

sdf>..., но вообще xcopy /j есть везде, где есть explorer, его проще использовать для проверки.


Нет, эта приблуда с Висты, по моему. В WinXP такого ключа ещё не было.

Но даже с этим ключом xcopy ведёт себя интересно, хотя и не валится сразу, когда валится xcopy без этого ключа.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>> SQL Express 2012
Re[5]: Как узнать кто пожирает память?
От: akasoft Россия  
Дата: 28.04.12 03:53
Оценка:
Здравствуйте, Holms, Вы писали:

H>НА машине клиент запускаем explorer и через шару копируем файл с сервера. т.е. на самом сервере клиент ничего не дедает.


Т.е. получается, что процесс копирования изолирован от сервера, а он (сервер) "валится" и сжирает всё физическое ОЗУ, я правильно понимаю?

Исправления Windows Update на сервере все стоят?
Роль файлового сервера назначена? (Шары же.)
Драйвер сетевого интерфейса обновлён на драйвер производителя, а не то, что ОС сама поставила при установке? Он свежий-последний? В changelog сетевых драйверов иногда бывают интересности и исправления ошибок.

H>да текущих задач более чем достаточно, всегда ~60% свободно, кроме когда пользователи начинают копировать большие файлы.


Обычно дисковый кэш в средствах наблюдения Windows отражается очень своеобразно. И правило трёх третей никто не отменял. Одну треть для загрузки компонентов ОС и ПО, одну для их меняющихся рабочих данных и одну для дискового кэша. Причём, чем больше роль файлового сервера у сервера, тем больше д.б. треть под кэш.

У w2k8r2 есть более подробный цветной монитор системных ресурсов. Пробовал смотреть динамику распределения ОЗУ там до процесса копирования, и когда он начался, и пошёл жор ОЗУ?
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>> SQL Express 2012
Re[6]: Как узнать кто пожирает память?
От: Holms США  
Дата: 28.04.12 04:49
Оценка:
Здравствуйте, akasoft, Вы писали:

A>Т.е. получается, что процесс копирования изолирован от сервера, а он (сервер) "валится" и сжирает всё физическое ОЗУ, я правильно понимаю?

Правильно

A>Исправления Windows Update на сервере все стоят?

все

A>Роль файлового сервера назначена? (Шары же.)

ага

A>Драйвер сетевого интерфейса обновлён на драйвер производителя, а не то, что ОС сама поставила при установке? Он свежий-последний? В changelog сетевых драйверов иногда бывают интересности и исправления ошибок.

не ставил, поставилочь то что вместе с системой

A>У w2k8r2 есть более подробный цветной монитор системных ресурсов. Пробовал смотреть динамику распределения ОЗУ там до процесса копирования, и когда он начался, и пошёл жор ОЗУ?

посмотрю
... << RSDN@Home 1.2.0 alpha 5 (M4) rev. 1510>>
The life is relative and reversible.