Theoretically in 64-bit Windows the maximum number of handles that a process can open is 232, because handles have 32 significant bits. However in reality it has been limited to 16 777 216 (224) per process. On 32-bit Windows the limit is likely 216
To support 16-bit programs, 32-bit Windows only generates a handles that have 16 significant bits — the 16 upper bits are ignored by the OS (even though programs are not to be taking advantage of this fact). So no program can interact with more than 216 objects, which is actually rather low.
However, in order to improve this, 64-bit Windows increased the number of significant bits in a handle to 32. But now that means that handles cannot be passed to 16-bit programs without loss of information. So 16-bit programs cannot run on 64-bit Windows.
Why can’t a 64 bit OS run a 16 bit application?
However for a single process that uses the default C run-time libraries then the default limit is 512
The C run-time libraries have a 512 limit for the number of files that can be open at any one time. Attempting to open more than the maximum number of file descriptors or file streams causes program failure. Use
_setmaxstdio
to change this number.File Handling
It’s unclear the maximum number of total file handles for all processes in Windows
For network connection the maximum number of open files per session is 16 384. This can be checked with the net config server
command
Further reading
- Pushing the Limits of Windows: Handles
- Is there a limit on number of open files in Windows
- Windows Server 2008 R2 max open files limit
- How many Windows handles in use is «too many»?
- Increasing no of file handles in Windows 7 64 bit
- Why is the limit of window handles per process 10,000?
The current file handle usage can easily be seen in task manager
Note that in DOS the number can be changed depending on the settings in config.sys and not fixed at 15
- FILES (DOS 2.0 and DR DOS 3.31 and higher; OS/2)
- Specifies the number of files that can be opened at once.
- FILESHIGH (MS-DOS 7.0 and DR-DOS 7.02 and higher[6] and FreeDOS only)
- Same as FILES, but explicitly loads file handles into upper memory.
https://en.wikipedia.org/wiki/CONFIG.SYS#CONFIG.SYS_directives
Theoretically in 64-bit Windows the maximum number of handles that a process can open is 232, because handles have 32 significant bits. However in reality it has been limited to 16 777 216 (224) per process. On 32-bit Windows the limit is likely 216
To support 16-bit programs, 32-bit Windows only generates a handles that have 16 significant bits — the 16 upper bits are ignored by the OS (even though programs are not to be taking advantage of this fact). So no program can interact with more than 216 objects, which is actually rather low.
However, in order to improve this, 64-bit Windows increased the number of significant bits in a handle to 32. But now that means that handles cannot be passed to 16-bit programs without loss of information. So 16-bit programs cannot run on 64-bit Windows.
Why can’t a 64 bit OS run a 16 bit application?
However for a single process that uses the default C run-time libraries then the default limit is 512
The C run-time libraries have a 512 limit for the number of files that can be open at any one time. Attempting to open more than the maximum number of file descriptors or file streams causes program failure. Use
_setmaxstdio
to change this number.File Handling
It’s unclear the maximum number of total file handles for all processes in Windows
For network connection the maximum number of open files per session is 16 384. This can be checked with the net config server
command
Further reading
- Pushing the Limits of Windows: Handles
- Is there a limit on number of open files in Windows
- Windows Server 2008 R2 max open files limit
- How many Windows handles in use is «too many»?
- Increasing no of file handles in Windows 7 64 bit
- Why is the limit of window handles per process 10,000?
The current file handle usage can easily be seen in task manager
Note that in DOS the number can be changed depending on the settings in config.sys and not fixed at 15
- FILES (DOS 2.0 and DR DOS 3.31 and higher; OS/2)
- Specifies the number of files that can be opened at once.
- FILESHIGH (MS-DOS 7.0 and DR-DOS 7.02 and higher[6] and FreeDOS only)
- Same as FILES, but explicitly loads file handles into upper memory.
https://en.wikipedia.org/wiki/CONFIG.SYS#CONFIG.SYS_directives
Содержание
- Снять ограничения одновременного открытия 15 и более файлов в Windows 10
- Максимальное количество открытых файлов (несерверная ОС).
- Есть ли ограничение на количество открытых файлов в Windows
- 7 ответов
- Про многозадачность: окна под контролем
- Переключение по-старому и по-новому
- «Временная шкала»
- Виртуальные рабочие столы Windows 10
- Полезные решения для работы с несколькими приложениями
- Разделение экрана
- Окно поверх
- Фишки Windows 10: как просто взаимодействовать с окнами и рабочими столами
- Содержание
- Содержание
- Работа с окнами
- Работа с рабочими столами
Снять ограничения одновременного открытия 15 и более файлов в Windows 10
Независимо от того, чем именно вы занимаетесь на компьютером, вам может потребоваться разом открыть достаточно большое количество однородных объектов. Казалось бы, что в этом сложно, но как показывает практика, сделать нечто подобное в «десятки» не просто, так как у нее имеются свои ограничения, которые не позволяют открывать больше 15 однородных файлов. Именно по этому, мы предлагаем вам просто на просто снять ограничения одновременного открытия 15 и более файлов в Windows 10.
Если вы долго используете операционные системы семейства Windows, тогда вам должно быть известно, что подобного рода ограничения уже давным-давно присущи разным ОС и сделано это специально для того, чтоб предотвратить чрезмерную нагрузку на работающую операционную систему, которая от столь большого количества открытых файлов, может зависнуть. Тем более, вероятность зависания операционной системы велика при условии, что папки или фалы будут иметь достаточно большой вес и загрузят процессор по полной.
Для того, чтоб снять ограничения одновременного открытия 15 и более файлов в Windows 10 вам нужно при помощи команды «regedit» произвести открытие «Редактора реестра» и в его левой колонке развернуть следующую ветку: HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Explorer.
Теперь, в подразделе с именем «Explorer», создаем совершенно новый, 32-битный параметр типа DWORD, которому задаем имя «MultipleInvokePromptMinimum» → производим клик по параметру «MultipleInvokePromptMinimum» и в десятичной системе исчисления, задаем то количество файлов, которое будет доступно для команд «MultipleInvokePromptMinimum»: «Открыть», «Изменить» и «Распечатать».
В нашем случае, мы поставили цифровое значение равное «50», что позволит без особых проблем, одновременно открыть 50 конкретных файлов или папок, которые нужным нам для работы.
Обратите внимание, что для вступления новых настроек, необходимо произвести перезагрузку операционной системы Windows 10.
Источник
Максимальное количество открытых файлов (несерверная ОС).
Столкнулся тут с «забавным» сюрпризом.
В конфигурации рабочей станции (net config server) указано, что максимальное число открытых файлов 16384.
Запускаю вот такой сценарий:
var FsoObject=WScript.CreateObject(«Scripting.FileSystemObject»);
var Path=»\\SERVER\C$\TEMP\TMP\»;
var FileArray=new Array();
for(i=0;i 0;)
<
f=FileArray[—i];
f.Close();
delete FileArray[i];
>
WScript.Echo(«End»);
Так вот. Данный сценарий «лажается» на числе 2709 или около того.
При этом, если какое-то время подождать, то можно создавать ещё файлы.
А если одновременно подключиться с другой машины (в другую директорию), то можно создать ещё 30-40 файлов (почему-то результат всегда разный).
Если файлы создавать локально, то все 100000 создаются как часы.
HKLMSystemCurrentControlSetControlSession ManagerMemory Management.
Параметр IoPageLockLimit (REG_DWORD) = 65536 (Decimal) /10000 (Hex)
HKLMSystemCurentControlSetServiseslanmanserverparameters.
Параметр Size (Dword) = 3
HKLMSystemCurentControlSetControlSession ManagerMemory Menegment
Параметр LargeSystemCache (Dword) = 1
P.S. вот такими «засадами» и «сюрпризами» вас всегда «радует» Microsoft.
(11) Во всем виноват Гейтс!
Зачем требовать от настольной ОС функционала и ресурсов серверной ОС?
Все на самом деле довольно просто (конечно если не залазить в дебри).
Если объяснять совсем просто то Win XP Home/Prof система управления памятью не заточена на серверные задачи, в т.ч. на файл-сервер. Конечно расшарить папки можно, но работать будет хуже чем на серверной ОС. В твоем случае система не выделяет достаточно памяти для открытия максимального количества файлов. А выделяет на «2709 или около того», при подключении с другого компьютера видимо отдается весь оставшийся резерв на «ещё 30-40 файлов»
Источник
Есть ли ограничение на количество открытых файлов в Windows
Я открываю много файлов с помощью fopen() в VC++, но через некоторое время это удается.
существует ли ограничение на количество файлов, которые вы можете открыть одновременно?
7 ответов
библиотеки времени выполнения C имеют ограничение 512 для количества файлов, которые могут быть открыты в любой момент времени. Попытка открыть больше максимального количества файловых дескрипторов или файловых потоков приводит к сбою программы. Использовать _setmaxstdio изменить это число. Более подробную информацию об этом можно прочитать здесь
информация по этому вопросу, соответствующая VS 2015, может быть найдена здесь
Если вы используете стандартные библиотеки POSIX C / C++ с Windows, ответ «да», есть предел.
однако, что интересно, ограничение накладывается типом библиотек C / C++, которые вы используете.
я наткнулся на следующий поток JIRA (http://bugs.mysql.com/bug.php?id=24509) из MySQL. Они имели дело с той же проблемой о количестве открытых файлов.
естественно, у вас может быть теоретически большое количество открытых файлов, используя метод, подобный пулу подключений к базе данных, но это будет иметь строгое влияние на представлении.
действительно, открытие большого количества файлов может быть плохой дизайн. Однако некоторые ситуации требуют этого. Например, если вы создаете сервер баз данных, который будет использоваться тысячами пользователей или приложений, серверу обязательно придется открыть большое количество файлов (или пострадать от снижения производительности с помощью методов пула файловых дескрипторов).
в случае, если кто-то еще неясен относительно того, к чему применяется предел, я считаю, что это предел для каждого процесса, а не для всей системы.
Я просто написал небольшую тестовую программу для открытия файлов, пока она не выйдет из строя. Он попадает в 2045 файлов перед сбоем (2045 + STDIN + STDOUT + STDERROR = 2048), затем я оставил это открытым и запустил другую копию.
вторая копия показала такое же поведение, то есть у меня было по крайней мере 4096 файлов, открытых сразу.
Да есть ограничения в зависимости от уровня доступа, который вы используете при открытии файлов. Вы можете использовать _getmaxstdio найти пределы и _setmaxstdio изменить ограничения.
предел зависит от ОС, и доступной памяти.
в старом Д. С. О. предел 255 simultaneuously открытых файлов.
в Windows XP предел выше (я считаю, что это 2,048, как указано MSDN).
Источник
Про многозадачность: окна под контролем
Марат Хайрулин, эксперт Microsoft в России, продолжает исследовать нюансы работы с несколькими задачами и рассказывает о совмещении окон и разделении экрана, о вашей личной машине времени для сайтов и документов, и о реальной пользе виртуальных столов.
В прошлой заметке мы писали о том, как современная наука относится к многозадачности и делились небольшими приемами, которые помогут сосредоточиться на одной задаче. А теперь хочтим напомнить (а кого-то может быть и познакомить) с полезными возможностями, которые помогут, если решение вашей задачи требует работы сразу с несколькими приложениями.
Переключение по-старому и по-новому
Переключение между приложениями – наверное то, что большинство из нас делает «на автомате», и никого, конечно, не удивит сочетание клавиш Alt + Tab. Но если одновременно нажать также и Ctrl (то есть Ctrl + Alt + Tab), то эта комбинация зафиксирует меню со всеми открытыми окнами на экране и позволит выбрать нужное приложение одним кликом мыши или касанием пальца (выбрать окно можно также с помощью стрелок на клавиатуре, а открыть – с помощью Enter). Может быть полезно, когда у вас открыто много окон.
Чуть менее известное, но тоже классическое сочетание клавиш Windows + Tab дает больше возможностей, чем кажется на первый взгляд.
Нажимая эти клавиши в актуальных версиях Windows 10, мы попадаем в раздел «Представление задач». Здесь можно не только переключаться между приложениями, но и воспользоваться «Временной шкалой» и «Виртуальными рабочими столами». К слову, вместо горячих клавиш вы можете кликнуть по кнопке «Представление задач» (обычно она расположена рядом с кнопкой «Пуск») или провести пальцем от левого края к центру сенсорного экрана. Кстати, если у вас современный ноутбук – попробуйте жест для тачпада: проведите по нему тремя пальцами вверх.
Режим Представление задач
«Временная шкала»
«Временная шкала» появилась в Windows 10 два года назад. Она помогает вернуться к задачам, над которыми вы работали ранее на вашем компьютере. При необходимости вы также сможете синхронизировать ее и с другими устройствами с вашей учетной записью*.
Для меня «Временная шкала» стала своеобразной машиной времени. Работа над многими проектами длится несколько дней. И если, допустим, в прошлую пятницу я работал с определенными сайтами и документами, вернувшись к этому проекту в среду, я смогу легко восстановить картину. Я просто отмотаю шкалу до нужной даты – той самой пятницы, увижу и смогу открыть те самые сайты и документы, в которые я тогда был погружен.
Поиск на Временной шкале
Поиск на «Временной шкале» тоже не раз меня выручал. В отличие от обычного поиска по файлам, я смогу искать не среди всех документов на устройстве (а их может быть очень много), а именно среди тех, с которыми я работал в последние дни. Возможно, вам знакомо сочетание Ctrl + F, запускающее поиск в Проводнике и во многих приложениях. Эта комбинация сработает и на экране «Представление задач»: то есть можно нажать сначала Windows + Tab, а затем – Ctrl + F и ввести искомое слово для поиска по «Временной шкале».
Виртуальные рабочие столы Windows 10
Концепция виртуальных рабочих столов далеко не нова. Если говорить о Windows, то одним из вариантов их использования была утилита Desktops, которую когда-то (последняя версия вышла в 2012 году) разработал Марк Руссинович. В Windows 10 виртуальные рабочие столы встроены в систему и помогают разделять потоки задач, переключаться между ними.
Если раньше вы не работали с виртуальными столами, для понимания их логики представьте такую аналогию: вам доступно несколько мониторов, на каждом вы можете открыть нужные программы, разделив их по рабочим потокам, например: на одном мониторе – работа с почтой и календарем, на другом – работа с несколькими документами Word, а на третьем – работа с браузером и OneNote. В каждый момент вы смотрите только на один монитор (виртуальный рабочий стол) со своим набором приложений. А переключаясь между виртуальными столами, вы как будто переводите взгляд с одного монитора на другой.
Перетаскивание окна для переноса его на новый виртуальный рабочий стол
Создать новый виртуальный рабочий стол можно на экране «Представление задач»: нажмите Windows + Tab и перетащите нужные окна открытых приложений на поле с надписью «+ Создать рабочий стол», и они будут перемещены на другой виртуальный рабочий стол. Можно также создать новый, пустой виртуальный стол (Windows + Ctrl + D) и уже затем открыть на нем нужные программы.
«Переводить взгляд» (то есть переключаться между настроенными рабочими столами) можно, выбирая нужный стол на экране «Представление задач», но намного удобнее переключаться с помощью горячих клавиш: Windows + Ctrl + стрелки вправо/влево, а на современных тачпадах – 4 пальца влево или вправо.
Полезные решения для работы с несколькими приложениями
Теперь еще об одной повседневной необходимости – работе с несколькими приложениями одновременно.
Разделение экрана
Первой возможности, о которой хочу напомнить, уже много лет, и в первоначальном виде (под названием Aero Snap) она появилась еще в Windows 7. В Windows 10 ее возможности расширили и назвали Snap Assist. Речь про разделение экрана для закрепления двух (а в Windows 10 – до четырех) приложений.
Snap Assist предлагает выбрать второе окно для закрепления справа
Чтобы это сделать, нужно взять приложение за самую верхнюю полоску, поднести его к правой или левой границе экрана до появления на экране его «тени» и отпустить (тем самым, закрепив первое приложение), а затем в появившихся рядом миниатюрах других приложений выбрать второе для закрепления рядом. Сценарий несложный, работает и для мыши, и для пальца. Еще проще это можно сделать с помощью сочетания клавиш Windows + клавиши со стрелками вправо/влево. Этому сочетанию уже больше 10 лет, но у тех, кто применяет его впервые, и сейчас порой возникает ощущение «цифровой магии».
Любознательным пользователям также напомню, что в Windows 10 можно отправлять приложение в «четвертинку» экрана, перенеся его в угол (или используя дополнительно клавиши Windows + стрелки вверх/вниз). При закреплении двух приложений можно перемещать границу между ними, выделяя какому-то из приложений больше места. Чтобы выбрать приложения для закрепления на экране, можно кликнуть правой кнопкой мыши по их миниатюрам на экране «Представление задач».
Окно поверх
У меня было довольно мало ситуаций, когда требовалось закреплять окно одного приложения поверх другого (кажется, на телевизорах подобное называлось режимом «картинка в картинке»), но если у вас такая необходимость возникает, напомню в завершение заметки о двух небольших возможностях.
Мини-режим встроенного видеоплеера (приложение «Кино и ТВ», которое воспроизводит видео в Windows 10 по умолчанию). Запустите видео и нажмите на небольшую кнопку в правом нижнем углу (Воспроизвести в мини-режиме), окно с видеороликом будет размещено поверх всех окон.
Видео в режиме Окно поверх
Аналогичную возможность, только с закреплением поверх всех приложений окна браузера, можно получить с использованием отдельных утилит. Однажды мне потребовалось работать над документом, постоянно сверяясь при этом с сайтом одного онлайн-сервиса, и меня выручило приложение Always on Top, доступное в Microsoft Store. Оно встраивается в меню «Поделиться» в Edge и позволяет отправить любой сайт в окно, расположенное поверх всех приложений. Я мог бы пошутить, что этот вариант отлично подошел бы для просмотра каналов на YouTube «одним глазком» во время работы, например, над сводными таблицами в Excel. Но как мы и обсуждали в первой заметке, такая многозадачность скорее повредит и просмотру, и работе.
В этом обзоре я поделился некоторыми возможностями при работе с одной или несколькими задачами, которыми пользуюсь сам. В следующих заметках продолжу разговор о приемах, которые помогут сделать нашу «цифровую жизнь» более продуктивной.
Источник
Фишки Windows 10: как просто взаимодействовать с окнами и рабочими столами
Содержание
Содержание
В статье мы расскажем о практичности работы в операционной системе Windows 10 по сравнению с предыдущими версиями.
Работа с окнами
Windows 10 предлагает гибкий инструмент работы с окнами для тех, кто работает в нескольких окнах одновременно. При этом функция доступна независимо от того, какой у вас монитор и сколько их вы используете. Неважно также, какие характеристики у вашего ПК или ноутбука. Работа с окнами доступна бесплатно и включается парой нажатий на клавиатуру. Единственным ограничением является количество окон на один экран — это 4 окна при условии, что вы доверили ОС определить их расположение. В ручном же режиме подобных окон можно открыть в несколько раз больше (но нужно ли?).
Для примера, окна трех приложений можно расположить таким образом:
Чтобы воспользоваться данным функционалом, сперва необходимо запустить все необходимые приложения в любом порядке. Рекомендуем открывать не более четырех окон.
После этого вам необходимо сделать окно активным, просто нажав на него. Теперь с помощью комбинации клавиши Win и клавиш-стрелок выбрать направление, в котором окно должно «прилипнуть».
Для примера: комбинация «Win + ←» расположила окно слева на всю высоту экрана.
Если хотите, чтобы окно заняло четверть рабочего стола, то комбинация «Win + ↓» или «Win + ↑» разместит окно снизу или сверху соответственно.
Следующий пример был получен сначала нажатием «Win + →», а затем «Win + ↓», что «прилепило» окно снизу и справа соответственно.
Такими же комбинациями можно настроить оптимальное расположение и размер остальных окон, переключаясь между ними. Все окна можно расположить в том порядке, который вам необходим.
Если у вас есть еще один монитор, вы можете таким же образом расположить окна в нем, расширив работу до 8 окон одновременно. Вероятно, такой способ кому-то покажется нагруженным и непрактичным, но тем, кто не хочет постоянно переключаться между окнами, он будет в самый раз.
Работа с рабочими столами
Работа с виртуальными рабочими столами повысит продуктивность и расширит понятие многозадачности при работе в Windows 10. Этот инструмент позволит увеличить кол-во окон, в которых можно работать одновременно, и отделить одну группу окон от другой. Например, если в одной группе окон вы работаете с текстом, а в другой — с фото. Как уже говорилось ранее, завышенных требований к характеристикам вашего ПК нет, платить за это тоже не надо.
Как только вам необходимо дополнительное пространство — новый рабочий стол для работы с необходимыми приложениями или даже играми, — нажмите комбинацию «Win + Tab».
Вы увидите менеджер работы с окнами и рабочими столами.
В верхнем левом углу, в блоке рабочих столов, вы можете создать необходимое количество рабочих столов.
Создав рабочий стол, вы получаете виртуальное пространство, аналогичное вашему основному рабочему столу, но только без запущенных в нем окон. Также вы можете переключаться на окна предыдущего рабочего стола, чтобы не загромождать рабочее пространство.
Если вам необходимо переключиться на предыдущий или следующий рабочий стол, воспользуйтесь комбинациями «Ctrl+Win+←» или «Ctrl+Win+→» соответственно. Переключение происходит почти мгновенно, нет необходимости ждать загрузки.
Виртуальные рабочие столы имеют общий буфер обмена, которым вы можете воспользоваться для того, чтобы скопировать и перенести информацию на любой из ваших рабочих столов.
Используя полученный опыт использования «многооконности» и «мультизадачности», вы можете приумножить скорость и удобство работы в приложениях. Это применимо к работе, общению, играм, разработке и так далее.
Источник
в 64-битных Windows теоретически максимальное количество дескрипторов, которые может открыть процесс, равно 232, потому что ручки имеют 32 бит. Однако в действительности он был ограничен 16,777,216 (224) для каждого процесса. На 32-битных Windows предел, вероятно, 216
для поддержки 16-битных программ 32-битная Windows генерирует только дескрипторы, которые имеют 16 значащих битов-16 верхних битов игнорируются ОС (даже если программы не должны воспользоваться этим фактом). Таким образом, ни одна программа не может взаимодействовать с более чем 216 объектами, что на самом деле довольно низко.
однако, чтобы улучшить это, 64-битная Windows увеличила количество значащих битов в дескрипторе до 32. Но теперь это означает, что хэндлы не могут быть переданы 16-битным программам без потери информации. Так что 16-битные программы не запускаются на 64-битной Windows.
почему 64-битная ОС не может работать 16 бит заявление?
для сетевого подключения максимальное количество открытых файлов за сеанс-16384. Это можно проверить с помощью net config server
команда
более дальнеишее чтение
- Раздвигая границы окна: ручки
- есть ли ограничение на количество открытых файлов в Windows
- Windows Server 2008 R2 максимальное количество открытых файлов
- сколько Ручки Windows в использовании «слишком много»?
- увеличение нет дескрипторов файлов в Windows 7 64 бит
- почему лимит оконные ручки в процессе 10,000?
текущее использование дескриптор файла можно легко увидеть в диспетчере задач
обратите внимание, что в DOS количество может быть изменено в зависимости от настроек в config.sys и не зафиксировано на 15
- FILES (DOS 2.0 и DR DOS 3.31 и выше; OS / 2)
- задает количество файлов, которые могут быть открыты одновременно.
- FILESHIGH (MS-DOS 7.0 и DR-DOS 7.02 и выше[6] и только FreeDOS)
- то же, что и файлы, но явно загружает дескрипторы файлов в верхнюю память.
https://en.wikipedia.org/wiki/CONFIG.SYS#CONFIG.SYS_directives
Я открываю много файлов с помощью fopen() в VC++, но через некоторое время это удается.
существует ли ограничение на количество файлов, которые вы можете открыть одновременно?
7 ответов
библиотеки времени выполнения C имеют ограничение 512 для количества файлов, которые могут быть открыты в любой момент времени. Попытка открыть больше максимального количества файловых дескрипторов или файловых потоков приводит к сбою программы. Использовать _setmaxstdio
изменить это число. Более подробную информацию об этом можно прочитать здесь
Также вам может потребоваться проверить, поддерживает ли ваша версия windows верхний предел, который вы пытаетесь установить с помощью _setmaxstdio
. Для получения дополнительной информации о _setmaxstdio
Регистрация здесь
информация по этому вопросу, соответствующая VS 2015, может быть найдена здесь
52
автор: stack programmer
Если вы используете стандартные библиотеки POSIX C / C++ с Windows, ответ «да», есть предел.
однако, что интересно, ограничение накладывается типом библиотек C / C++, которые вы используете.
я наткнулся на следующий поток JIRA (http://bugs.mysql.com/bug.php?id=24509) из MySQL. Они имели дело с той же проблемой о количестве открытых файлов.
однако Пол Дюбуа объяснил, что проблема может эффективно устраняется в Windows с помощью …
вызовы Win32 API (CreateFile(),
WriteFile () и так далее) и
максимальное количество открытых файлов по умолчанию
был увеличен до 16384. Этот
максимум можно увеличить дальше мимо
использование параметра —max-open-files=N в
запуск сервера.
естественно, у вас может быть теоретически большое количество открытых файлов, используя метод, подобный пулу подключений к базе данных, но это будет иметь строгое влияние на представлении.
действительно, открытие большого количества файлов может быть плохой дизайн. Однако некоторые ситуации требуют этого. Например, если вы создаете сервер баз данных, который будет использоваться тысячами пользователей или приложений, серверу обязательно придется открыть большое количество файлов (или пострадать от снижения производительности с помощью методов пула файловых дескрипторов).
в случае, если кто-то еще неясен относительно того, к чему применяется предел, я считаю, что это предел для каждого процесса, а не для всей системы.
Я просто написал небольшую тестовую программу для открытия файлов, пока она не выйдет из строя. Он попадает в 2045 файлов перед сбоем (2045 + STDIN + STDOUT + STDERROR = 2048), затем я оставил это открытым и запустил другую копию.
вторая копия показала такое же поведение, то есть у меня было по крайней мере 4096 файлов, открытых сразу.
Да есть ограничения в зависимости от уровня доступа, который вы используете при открытии файлов. Вы можете использовать _getmaxstdio
найти пределы и _setmaxstdio
изменить ограничения.
Я не знаю, откуда Пауло взял этот номер.. В операционных системах на базе windows NT количество дескрипторов файлов, открытых для каждого процесса, в основном ограничено физической памятью — это, безусловно, сотни тысяч.
Да, есть предел.
предел зависит от ОС, и доступной памяти.
в старом Д. С. О. предел 255 simultaneuously открытых файлов.
в Windows XP предел выше (я считаю, что это 2,048, как указано MSDN).
столкнулся с той же проблемой, но с использованием Embarcadero C++-Builder из RAD Studio 10.2. C-время выполнения этой вещи, похоже, не обеспечивает _getmaxstdio
или _setmaxstdio
, но некоторые макрос и их предел по умолчанию намного ниже, чем сказано здесь для других сред выполнения:
С stdio.h:
/* Number of files that can be open simultaneously
*/
#if defined(__STDC__)
#define FOPEN_MAX (_NFILE_)
#else
#define FOPEN_MAX (_NFILE_)
#define SYS_OPEN (_NFILE_)
#endif
_nfile.h:
#if defined(_WIN64)
#define _NFILE_ 512
#else
#define _NFILE_ 50
#endif
0
автор: Thorsten Schöning
Здесь я разбираю настройки системы с помощью конфига /etc/sysclt.conf, для того чтобы задать лимит открытых файлов для системы и процессов.
Лимит открытых файлов в системе
В системе Linux каждый открытый файл занимает файловый дескриптор. Информация по занятым файловым дескрипторам и их лимит хранится в файле /proc/sys/fs/file-nr:
$ cat /proc/sys/fs/file-nr 1120 0 9223372036854775807
В выводе мы видим 3 числа:
- Количество выделенных файловых дескрипторов (1120). Показывает количество открытых файлов в системе.
- Число выделенных, но не используемых файловых дескрипторов (0). Ядро версии выше чем Linux 2.6 всегда показывает 0. Потому что количество выделенных файловых дескрипторов точно соответствует количеству используемых файловых дескрипторов.
- Максимальное число файловых дескрипторов (9223372036854775807). Это и есть лимит открытых файлов в системе, который можно изменить с помощью файла sysclt.conf.
Для того, чтобы задать лимит, нужно в файле /etc/sysclt.conf задать параметр fs.file-max и указать ему значение, например:
$ sudo nano /etc/sysctl.conf fs.file-max=1000000
Для того, чтобы изменения вступили в силу нужно выполнить команду:
$ sudo sysctl -p fs.file-max = 1000000
В выводе мы увидим, какие изменения применяются.
И чтобы проверить наши изменения, опять посмотрим на файл /proc/sys/fs/file-nr:
$ cat /proc/sys/fs/file-nr 1120 0 1000000
После проделанного я верну всё как было:
$ sudo nano /etc/sysctl.conf fs.file-max=9223372036854775807 $ sudo sysctl -p fs.file-max = 9223372036854775807
Вообще, на серверах, вряд ли понадобится уменьшать данный лимит.
Лимит открытых файлов для каждого процесса
Общесистемный лимит мы рассмотрели. Теперь я покажу как задать лимит открытых файлов для каждого отдельного процесса. Но вначале посмотрим какой лимит используется по умолчанию, для этого нужно посмотреть файл /proc/sys/fs/nr_open:
$ cat /proc/sys/fs/nr_open 1048576
То есть, любой процесс в системе не сможет открыть более 1048576 файлов.
Можем поменять это значение, также используя /etc/sysctl.conf. Параметр в этом случае будет называться fs.nr_open:
$ sudo nano /etc/sysctl.conf fs.nr_open=1024 $ sudo sysctl -p fs.file-max = 9223372036854775807 fs.nr_open = 1024 $ cat /proc/sys/fs/nr_open 1024
Если хотите, то можете почитать официальную документацию по файлам находящимся в /proc/sys/fs/ – здесь.
Узнаём сколько сейчас открыто файлов у произвольного процесса
Чтобы узнать, сколько сейчас открыто файлов у произвольного процесса, выполните ls /proc/<pid>/fd | wc -l:
$ sudo ls /proc/1/fd/ | wc -l 81 $ sudo ls /proc/525/fd/ | wc -l 15
А для того, чтобы пробежаться по списку процессов определённого пользователя и узнать сколько файлов эти процессы открыли, я написал такой скрипт:
$ nano openfiles-users-procs.sh #!/bin/bash user=$1 function work_fun { ps -u $user | awk '{print $1}' | grep -v PID | while read line do echo "Открыто файлов для `ps -p "$line" -o comm | grep -v COMMAND` ("$line") = `sudo ls /proc/$line/fd/ | wc -l`" done } work_fun | sort -rnk 7
Дадим право на исполнение этому скрипту:
$ chmod u+x openfiles-users-procs.sh
И выполним:
$ ./openfiles-users-procs.sh alex ls: cannot access '/proc/6952/fd/': No such file or directory ls: cannot access '/proc/6953/fd/': No such file or directory ls: cannot access '/proc/6954/fd/': No such file or directory Открыто файлов для systemd (677) = 29 Открыто файлов для sshd (788) = 11 Открыто файлов для (sd-pam) (678) = 7 Открыто файлов для openfiles-users (6955) = 4 Открыто файлов для openfiles-users (6949) = 4 Открыто файлов для bash (797) = 4 Открыто файлов для sort (6951) = 3 Открыто файлов для openfiles-users (6950) = 3 Открыто файлов для (6954) = 0 Открыто файлов для (6953) = 0 Открыто файлов для (6952) = 0
Здесь, в самом начале, вы видите ошибки. Просто процессы 6952, 6953, 6954 существовали, но пока скрипт выполнялся они уже завершились. А просто сложив все эти числа вы узнаете, сколько файлов открыто у определённого пользователя.
Итог
В этой статье я разобрал, как можно задать лимит открытых файлов используя конфиг sysclt.conf. Этот лимит накладывается ядром системы, но есть и другие механизмы накладывающие свои лимиты, о них я расскажу в следующих статьях.
Сводка
Имя статьи
Лимит открытых файлов — настройки sysclt.conf
Описание
Здесь я разбираю настройки системы с помощью конфига /etc/sysclt.conf, для того чтобы задать лимит открытых файлов для системы и процессов
|
|||
Цыпленок
06.07.12 — 10:53 |
Столкнулся с такой реализацией сервера на базе Windows7 для дбф базы 7.7 (размер примерно 400 мгб). На остальных машинах XP и работают с сервером (в папке с базой ordnochk.prm). Одновременно может работать с базой до 7 (количество уточняю) пользователей, плюс еще три пользователя работают с ней через УРБД. |
||
Irek-kazan
1 — 06.07.12 — 10:55 |
а причем здесь сервер спросите вы? |
||
Цыпленок
2 — 06.07.12 — 10:56 |
(1) Вроде есть ограничение на количество одновременно открываемых файлов, не? |
||
360i
3 — 06.07.12 — 10:59 |
(2) До двадцати подключений по SMB |
||
smaharbA
4 — 06.07.12 — 11:02 |
в реестр внеси
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServiceslanmanserverparameters] и запрети на шаре кеширование |
||
Цыпленок
5 — 06.07.12 — 11:04 |
(3) Так, а как со скоростью работы при 20 пользователях? ) Тут нашел еще что жаловались на ошибки при базе на сервере с вин7 |
||
zahar140382
6 — 06.07.12 — 11:12 |
насколько я знаю к вин 7 могут одновременно подключатся до 20 машин.больше невыйдет. |
||
Kavar
7 — 06.07.12 — 11:14 |
(6) тут проблема не в количестве пользователей, а в количестве одновременно открытых файлов. |
||
smaharbA
8 — 06.07.12 — 11:14 |
(5) это выбор |
||
zahar140382
9 — 06.07.12 — 11:15 |
(7) а почему не так ? |
||
Цыпленок
10 — 06.07.12 — 11:16 |
(8) Спасибо за инфу. |
||
zahar140382
11 — 06.07.12 — 11:20 |
(9) хотя этот пораметр на одновременное открытие файлов локально. |
||
Цыпленок
12 — 06.07.12 — 11:21 |
А с количеством одновременно открываемых файлов могут быть проблемы? |
||
zahar140382
13 — 06.07.12 — 11:35 |
http://social.technet.microsoft.com/Forums/ru-RU/vistaru/thread/76420c6e-d01c-4df9-b626-e6d46b08c849 |
||
zahar140382
14 — 06.07.12 — 11:39 |
хотя возможно и нет ограничений(как у же сказали тут повысте производительность для общего доступа) |
||
smaharbA
15 — 06.07.12 — 11:42 |
ограничение как и было 16к, и точно так же настраиваемо как раньше, но большое предельно число открываемых файлов требует ресурсы — для стека и т.д., даже если файл открыт один |
||
smaharbA
16 — 06.07.12 — 11:43 |
грубо делим 16к на количество файлов конфы |
||
Цыпленок
17 — 06.07.12 — 11:51 |
В конфе 462 файла, получается 34 пользователя примерно могут работать одновременно. Что то многовато выходит. |
||
smaharbA
18 — 06.07.12 — 12:44 |
(17) это грубо + файлы платформы если они на шаре + файлы блокировок и прочая шелуха |
||
VladZ
19 — 06.07.12 — 12:47 |
(0) windows 7 server — нет не слышал… |
||
Sakura
20 — 06.07.12 — 12:53 |
(0) 7 — не серверная система, зачем так извращаться? |
||
Цыпленок
21 — 06.07.12 — 12:55 |
(20) Я тоже так думал, выясняется, вполне рабочее решение. |
||
1Сергей
22 — 06.07.12 — 12:58 |
Я так понимаю этот «сервер» используется ещё и как пользовательская машина? |
||
Цыпленок 23 — 06.07.12 — 12:58 |
Нет. |
TurboConf — расширение возможностей Конфигуратора 1С |
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку «Обновить» в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.