Ru-Board.club
← Вернуться в раздел «Программы»

» Как снять ограничение на количество открытых файлов в WinXP?

Автор: MCD
Дата сообщения: 10.10.2002 09:39
Hi All !

Есть комп с WinXP, используемый в качестве файл-сервера, на нем расшарена база данных 1С. При запуске пользователями нескольких копий 1С происходит ошибка при открытии файла таблицы 1С.
На серваке в Event Viewer'е появляется сообщение:

Event ID: 2017
The server was unable to allocate from the system nonpaged pool because the server reached the configured limit for nonpaged pool allocations.

Я так подозреваю что открывается слишком много файлов одновременно.
Единственное что я пока смог найти это ключи реестра:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\NonPagedPoolSize
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\NonPagedPoolQuota

попробовал менять там значения с 0 на 256 000 000 и 512 000 000, но ничего не изменилось.

В MSDN на этот Event ID написано вот что:

Event Message:

The server was unable to allocate from the system nonpaged pool because the server reached the configured limit for nonpaged pool allocations.

Source Event Log Event ID Event Type
Srv System 2017 Error

Explanation:

This is a non-critical message that appears if the server is configured to use limited resources. If the server is configured to use an unlimited number of connections, some hidden parameters might need to be changed.

User Action:

No action is needed unless the server has reached the maximum configured Optimization setting. When this is reached, contact the person with administrative rights on the server to increase the Optimization setting.

Но легче от такого объяснения не становится

Подскажите please как устранить эту проблему.
Автор: ymy
Дата сообщения: 10.10.2002 10:05

PagedPoolSize and NonPagedPoolSize Values in Windows NT

SUMMARY
Windows NT calculates NonPagedPoolSize and PagedPoolSize based on the amount of physical memory present in the computer at boot time. This article describes the algorithms used to calculate these values on an x86- based computer.

MORE INFORMATION
NonPagedPoolSize and PagedPoolSize are calculated using complex algorithms based on physical memory size. However, you can use the following formulas to approximate these values for an X86-based computer.

Definitions
MinimumNonPagedPoolSize = 256K
MinAdditionNonPagedPoolPerMb = 32K
DefaultMaximumNonPagedPool = 1 MB
MaxAdditionNonPagedPoolPerMb = 400K
PTE_PER_PAGE = 1024
PAGE_SIZE=4096

NonPagedPoolSize Calculation
NonPagedPoolSize = MinimumNonPagedPoolSize + ((Physical MB - 4) * MinAdditionNonPagedPoolPerMB)
EXAMPLE - On a 32 MB x86-based computer:

MinimumNonPagedPoolSize = 256K
NonPagedPoolSize = 256K + ((32 - 4) * 32K) = 1.2 MB

MaximumNonPagedPoolSize = DefaultMaximumNonPagedPool + ((Physical MB - 4) * MaxAdditionNonPagedPoolPerMB)

If MaximumNonPagedPoolSize < (NonPagedPoolSize + PAGE_SIZE * 16),
then MaximumNonPagedPoolSize = (NonPagedPoolSize + PAGE_SIZE * 16)

IF MaximumNonPagedPoolSize >= 128 MB MaximumNonPagedPoolSize = 128 MB

EXAMPLE - On a 32 MB x86-based computer:

MaximumNonPagedPoolSize = 1 MB + ((32 - 4) * 400K) = 12.5 MB


PagedPoolSize Calculation
Size = (2 * MaximumNonPagedPoolSize) / PAGESIZE Size = (Size + (PTE_PER_PAGE - 1)) / PTE_PER_PAGE PagedPoolSize = Size * PAGESIZE * PTE_PER_PAGE IF PagedPoolSize >= 192 MB PagePoolSize = 192 MB EXAMPLE - On a 32 MB x86-based computer:
Size = (2 * 12.5M) / 4096 = 6400
Size = (6400 + (1024 - 1)) / 1024 = 7.25
PagedPoolSize = 7.25 * 4096 * 1024 = 30MB
NOTE: If both values are set to zero in the registry, PagedPoolSize will calculate to approximately memory size)
The kernel debugger can be used to view these global variables in memory.
The values shown below are for a 32 MB x86-based computer running Windows NT 3.5, build 807:

kd> dd MmDefaultMaximumNonPagedPool
8019e4d4 00100000 (1Mbyte)

kd> dd MmSizeOfNonPagedPoolInBytes
80196188 00120000 (1,179,648)

kd> dd MmMinimumNonPagedPoolSize l1
8019e4cc 00040000 (262144)

kd> dd MmNumberOfPhysicalPages l1
801961ac 00002010 (8208)

kd> dd MmMinAdditionNonPagedPoolPerMb l1
8019e4d0 00008000 (32768)

kd> dd MmMaximumNonPagedPoolInBytes l1
80196310 00c20000 (12713984)

kd> dd MmSizeOfPagedPoolInBytes l1
8019e4dc 02000000 (33554432)

These values may be modified in the registry.

WARNING: Using the Registry Editor incorrectly can cause serious, system- wide problems that may require you to reinstall Windows NT to correct them. Microsoft cannot guarantee that any problems resulting from the use of the Registry Editor can be solved. Use this tool at your own risk.

The page pooled memory management parameters are located in:


HKEY_LOCAL_MACHINE
\SYSTEM
\CurrentControlSet
\Control
\Session Managerl
\Memory Management
For additional information about the /3GB setting, click the article number below to view the article in the Microsoft Knowledge Base:
Q171793 Information on Application Use of 4GT RAM Tuning
Microsoft Windows 2000
The Windows 2000 memory model increases the amount of nonpaged pool and paged pool memory available to the system.
A Windows 2000-based 32-bit x86 computer that is booted without the /3GB switch is changed to a maximum paged pool of approximately 300-470 MB (from 192 MB in Windows NT 4.0).

With Windows 2000, the amount of nonpaged pool that the operating system can use is increased to 256 MB (from 128 MB in Windows NT 4.0).

If the server is booted with the /3GB switch enabled, the memory model remains that same for nonpaged and paged pool as in Windows NT 4.0.

Решение: Памяти побольше поставить, или вычислить максимально возможный рамер для твоего кол-ва памяти и написать его в реестр.
Автор: MCD
Дата сообщения: 10.10.2002 10:18
ymy

Это мне тоже где-то попадалось, в help'е вроде бы.

Ну так я пробовал прописывать в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\NonPagedPoolSize и
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management\NonPagedPoolQuota
значения 256 000 000 и 512 000 000

или туда нужно прописывать только числа полученные в результате расчета ?
или не в байтах ?
или для PagedPoolSize тоже нули нужно заменить ?

сейчас попробовал прописать в NonPagedPoolSize:
1M + (256-4)*400k = 104 267 776 - все то же самое, валится при примерно:
256k + (256-4)*32k = 8320k т.е. на минимуме.

Что ему не нравится интересно ?


Автор: MCD
Дата сообщения: 14.10.2002 10:06
Up
Автор: ymy
Дата сообщения: 14.10.2002 13:55
Точно в байтах, но сам я честно говоря не эксперементировал, в своё время мне нужен был просто максимальный размер NonPagedPool-а узнать. Может всё-таки памяти побольше поставишь.

Или попробуй NonPagedPoolQuota должна быть 0, а вот NonPagedPoolSize попробуй поставь 103809024.

Да, и при установке значений кто валится то сама система вообще не работает, или просто опять ошибка?
Автор: MCD
Дата сообщения: 14.10.2002 14:07
ymy

А как ты насчитал 103 809 024 ?

Quota в 0 стоит.

Никто при установке значений не валится, все работает как и раньше.

Т.е. больше трех-четырех копий 1С на трех юзеров не запустить. Валится четвертая-пятая открываемая копия 1С с ошибкой об открытии файла таблицы. В Event Viewer'е приходит болт Event ID: 2017, в Task Manager'е значение nonpaged в районе 8 300, т.е. min для 256 метров оперативки.

Добавлено
ymy

Кстати тут недавно дома после развлечения с DVD Decrypter'ом заглянул в Task Manager - значение nonpaged зашкаливало за 30 000, и это при 512 мегах оперативки, вот как блин это можно объяснить ?

Как говорится - ничифо ни панимаю.

Добавлено
ymy

А насчет побольше памяти, ну докупим мы 256 метров, а ты уверен что это решит проблему, а не отодвинет ее еще на 3-4 экземпляра 1С ?
Им иногда на троих и больше 9 бывает нужно.
Автор: ymy
Дата сообщения: 14.10.2002 22:03

Цитата:
А как ты насчитал 103 809 024?

Да не, я думал у тебя система рухает после установки цифирь, вот и предложил округлить до 6300000h, с памятью бавают траблы связанный с выравниванием. Вообще, скорее всего при нуле система сама растит nonpaged до максимума, так что доп. память видимо. Хотя думаю действительно на 3-4 экземпляра 1С. Может там 1С какие настройки.
Автор: MCD
Дата сообщения: 15.10.2002 10:05
ymy

Сейчас добавил памяти до 512 - ничего не изменилось, все те же ~3-4 экземпляра и потом ничего не открывается.
Значит где-то в другом собака порылась.
1C открывает очень много файлов таблиц - может тут дело в этом, вроде бы в NT4 было ограничение на количество одновременно открытых файлов и его нужно было где то снимать в настройках, но вот где я не знаю.

Тут кстати на iXBT инфы подкинули по поводу nonpaged но проблему это не решило, может тебе будет это интересно:

NonPagedPoolSize
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management

Data type Range Default value
REG_DWORD 0 | Number of bytes 0

Description
Specifies the size of the nonpaged pool.

Value Meaning
0 The system calculates an optimal value for this entry based on the amount of physical memory on the computer, and then adjusts this value if the amount of memory changes. This value is optimal for most systems.
Number of bytes Creates a nonpaged pool of the specified size. This overrides the value calculated by the system and prevents the system from adjusting this value dynamically. This setting can degrade performance.

Activation method
You must restart the computer before a change to this value takes effect.

NonPagedPoolQuota
HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management

Data type Range Default value
REG_DWORD 0 | 1-128 (megabytes) 0

Description
Establishes the maximum space in the nonpaged pool that can be allocated by any process. Any attempt by a process to allocate more space in the nonpaged pool will fail.

Value Meaning
0 The system calculates an optimal value for this entry based on the amount of physical memory on the computer, and adjusts this value if the amount of memory changes. This value is optimal for most systems.
1–128 Overrides the value calculated by the system and prevents the system from adjusting this value dynamically. This setting can degrade performance.
Автор: ymy
Дата сообщения: 15.10.2002 16:19
Вот цитата из MSDN

Цитата:

The SetHandleCount function sets the number of file handles available to a process.

Windows NT/2000 and Windows 95/98: This function has no effect, because there is no explicit file handle limit for applications on these platforms.
Автор: MCD
Дата сообщения: 16.10.2002 08:04
ymy

Ну тогда я уже совсем ничего не понимаю. Чего ж тогда 1С не хватает, если даже тупое увеличение памяти в 2 раза вообще ничего не изменило.
Есть какие-нибудь мысли по этому поводу ?

Добавлено
Мы тут кое-что еще нарыли.
Написали маленькую прогу которая одновременно открывает кучу файлов и выяснилось, что если запускать ее с локала - то все нормально, а если с шары на серваке - то приходит этот болт с nonpaged pool, так что все дело в ограничении на количество открытых файлов по smb протоколу. Теперь осталось только найти как это разрулить.
Автор: ymy
Дата сообщения: 16.10.2002 13:13
MCD Я 1С вообще никогда не пользовался, наверное ошибка в проге: вдруг хочет заграбастать очень много из nonpaged pool, если 1С лицензионная, то можно наверное у самих 1С спросить. Больше так вроде идей нет. А Pagefile у тебя какой?
Автор: MCD
Дата сообщения: 18.10.2002 11:48
ymy

Все, проблема решена.
Thanks to DrEvil

-------------------------

Нужно создать в HKLM\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters

MaxNonpagedMemoryUsage , DWORD - максимальный объем памяти, который Серверу разрешено использовать из nonpaged memory pool в один момент времени.

Значения: 0x100000 - 0xFFFFFFFF bytes

MaxPagedMemoryUsage - то же для paged и те же допустимые значения

-------------------------

После того как я создал MaxNonpagedMemoryUsage 0xFFFFFFFF - предел количества открытых файлов в моей программке возрос с ~ 2000 до ~ 6500 и вылез болт о нехватке paged pool, а после создания MaxPagedMemoryUsage 0xFFFFFFFF - 10000 спокойно открывается, дальше я не проверял но надеюсь нашей бухгалтерии хватит.

Проверил на 1С - теперь все работает, дело было именно в ограничении на количество открытых файлов.
Автор: tankistua
Дата сообщения: 18.10.2002 12:21

Цитата:
Проверил на 1С - теперь все работает

на долго ли?

сколько у тебя пользователей работает?
Автор: MCD
Дата сообщения: 18.10.2002 12:57
tankistua

У меня если работает - то работает надолго

Работают 3 пользователя (больше нам не надо, бухгалтеров у нас всего 3), у каждого открыто по 3-4 экземпляра 1С - полет нормальный.

Какие тут еще могут быть проблемы ? Только если с количеством подключенных юзеров - но в моем случае это не актуально, у меня их 3.

Страницы: 1

Предыдущая тема: Об особенностях создания загрузочного диска в EasyCDCreator


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.