- Какое количество открытых файлов ограничено?
- 1 ответов
- Как определить кто открыл файлы в сетевой папке и сбросить сессии пользователя в Windows Server
- Вывести список открытых файлов на файловом сервере Windows
- Как определить какой пользователь открыл файл
- Как закрыть открытый файл
- Как удаленно закрыть открытые файлы с помощью PowerShell
- Как на Windows узнать, сколько файлов хранится в папках
- Метод 1. Используйте Проводник для выбора файлов и папок, которые вы хотите подсчитать
- Способ 2. Используйте окно «Свойства» для рекурсивного подсчета всех файлов и папок
- Метод 3. Используйте командную строку для рекурсивного подсчета всех файлов и папок
- Метод 4. Используйте PowerShell для подсчета всех файлов и папок
- Заключение
- Максимальное количество открытых файлов (несерверная ОС).
Какое количество открытых файлов ограничено?
каковы текущие ограничения количества открытых файлов в Windows 10? В dos это число равно 15.
1 ответов
в 64-битных Windows теоретически максимальное количество дескрипторов, которые может открыть процесс, равно 2 32 , потому что ручки имеют 32 бит. Однако в действительности он был ограничен 16,777,216 (2 24 ) для каждого процесса. На 32-битных Windows предел, вероятно, 2 16
для поддержки 16-битных программ 32-битная Windows генерирует только дескрипторы, которые имеют 16 значащих битов-16 верхних битов игнорируются ОС (даже если программы не должны воспользоваться этим фактом). Таким образом, ни одна программа не может взаимодействовать с более чем 216 объектами, что на самом деле довольно низко.
однако, чтобы улучшить это, 64-битная Windows увеличила количество значащих битов в дескрипторе до 32. Но теперь это означает, что хэндлы не могут быть переданы 16-битным программам без потери информации. Так что 16-битные программы не запускаются на 64-битной Windows.
для сетевого подключения максимальное количество открытых файлов за сеанс-16384. Это можно проверить с помощью net config server команда
более дальнеишее чтение
текущее использование дескриптор файла можно легко увидеть в диспетчере задач
обратите внимание, что в 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)
- то же, что и файлы, но явно загружает дескрипторы файлов в верхнюю память.
Как определить кто открыл файлы в сетевой папке и сбросить сессии пользователя в Windows Server
Администраторы файловых серверов Windows часто сталкиваются с необходимостью принудительного закрытия файлов, открытых пользователями. Такая задача возникает при одновременной работы с одним файлом нескольких пользователей. Часто при некорректной работе ПО или неправильном завершении сессии пользователем, файлы в сетевой папке оказываются открытыми и заблокированными, и остальные пользователи не могут вносить в него изменения. В этой статье мы покажем, как получить список открытых файлов на файловом сервере, узнать какие пользователи их используют, и способы сброса этих файловых сессий.
Вывести список открытых файлов на файловом сервере Windows
Список открытых пользователями файлов на файловом сервере Windows можно получить с помощью стандартной графической консоли Computer Management (Управление компьютером — compmgmt.msc ).
Запустите на файловом сервере консоль Computer Management (или подключитесь к нему удаленно консолью со своего компьютера) и перейдите в секцию System Tools -> Shared Folders -> Open files (Служебные программы -> Общие папки -> Открыты файлы). В правой части окна отображается список файлов сервера, открытых удаленно . Список содержит локальный путь к файлу, имя учетной записи пользователя, количество блокировок и режим, в котором открыт файл (Read или Write+Read).
Этот же список открытых файлов можно получит с помощью встроенной консольной утилиты Openfiles . Например, с помощью следующей команды можно получить id сессии, имя пользователя и полный локальный путь к открытому файлу:
Openfiles /Query /fo csv |more
При удаленном доступе пользователя к папке или файлу в сетевой папке (SMB) на сервере, для пользователя создается новая сессия, определяющая данное подключение. Управление подключениями пользователей осуществляется именно через эти идентификаторы сессий.
Эту же команду можно выполнить удаленно, например, нужен список открытых файлов на файловом сервере mskfs01:
Openfiles /Query /s mskfs01 /fo csv
У команды Openfiles есть еще одна интересная возможность просмотра списка локально открытых файлов. Для ее использования нужно включить опцию Maintain Objects List (Построение списка объектов) командой openfiles /local on и перезагрузить сервер. После этого в список начнут попадать файлы, открытые локальными процессами (этот режим желательно использовать только для отладки, т.к. может негативно сказаться на производительности сервера).
Как определить какой пользователь открыл файл
Чтобы определить пользователя, который открыл (заблокировал) файл cons.adm на сервере, выполните команду:
Openfiles /Query /s mskfs01 /fo csv | find /i «cons.adm»
Ключ /i используется, чтобы выполнялся регистронезависимый поиск
Естественно, можно указать только часть имени файла. К примеру, нам нужно узнать кто открыл xlsx файл, в имени которого есть строка farm, воспользуемся таким конвейером:
Openfiles /Query /s mskfs01 /fo csv | find /i «farm»| find /i «xlsx»
Можно, конечно найти файл и в графической консоли Computer Management, но это менее удобно (консоль не предусматривает возможность поиска).
Как закрыть открытый файл
Чтобы закрыть открытый файл, нужно найти его в списке файлов секции Open File и в контекстном меню выбрать пункт « Close Open File ».
Если на файловом сервере сотни открытых файлов, найти их в консоли будет непросто. Удобнее воспользоваться утилитой Openfiles . Как мы уже говорили, она возвращает ID сессии открытого файла. Именно по этому ID сессии, файл можно принудительно закрыть, сбросив подключение. Находим ID нужного файла:
Openfiles /Query /s mskfs01 /fo csv | find /i «farm»| find /i «.xlsx»
Отключаем от него пользователя по полученному идентфикатору:
Openfiles /Disconnect /s mskfs01 /ID 67109098
Как удаленно закрыть открытые файлы с помощью PowerShell
В Windows Server 2012 / Windows 8 в PowerShell появились командлеты для работы с шарами и файлами на SMB сервере. Данные командлеты можно использовать для удаленного сброса подключений к открытому файлу.
Список открытых файлов можно получить с помощью командлетов Get- SMBOpenFile , а закрыть файл (сбросить подключение) с помощью Close-SmbOpenFile .
Итак, подключаемся к удаленному серверу:
$sessn = New-CIMSession –Computername mskfs01
Находим и закрываем открытый файл pubs.docx одной командой:
Get-SMBOpenFile -CIMSession $sessn | where <$_.Path –like "*pubs.docx">| Close-SMBOpenFile -CIMSession $sessn
Подтверждаем закрытие файла, нажав Y.
Чтобы убрать подтверждение принудительного закрытия файла на сервере, используйте ключ -Force
Эти же команды можно использовать, к примеру, чтобы закрыть все файлы, открытые некоторым пользователем (пользователь ушел домой и не освободил файлы). К примеру, чтобы сбросить все файловые сессии для пользователя ipivanov, выполните
Get-SMBOpenFile -CIMSession $sessn | where <$_.ClientUserName –like "*ipivanov*">|Close-SMBOpenFile -CIMSession $sessn
Как на Windows узнать, сколько файлов хранится в папках
Бывают случаи, когда вам нужно точно знать, сколько файлов или папок хранится в определенной папке. Независимо от того, работаете ли вы для своей статистики или если у вас есть устройство Windows, существует множество способов, которыми вы можете найти эту информацию. Мы решили написать статью, в которой мы собираемся показать вам все методы, которые мы знаем, для подсчета элементов, найденных внутри папки.
ПРИМЕЧАНИЕ. Методы подсчета файлов и папок, которые мы покажем в этой статье, работают аналогично в Windows 10, Windows 8.1 и Windows 7. Для простоты мы будем использовать только скриншоты, сделанные в Windows 10.
Метод 1. Используйте Проводник для выбора файлов и папок, которые вы хотите подсчитать
Первый метод предполагает использование Проводника / Проводника Windows . Откройте «Проводник» и перейдите к папке, в которой хранятся элементы, которые вы хотите подсчитать.
Общее количество элементов (файлов и папок), хранящихся внутри, отображается в нижнем левом углу пользовательского интерфейса File Explorer.
Если вы хотите считать только некоторые из файлов или папок, хранящихся в вашей папке, выберите их все и посмотрите на нижнюю левую часть интерфейса File Explorer. Он отобразит количество выбранных элементов.
Способ 2. Используйте окно «Свойства» для рекурсивного подсчета всех файлов и папок
Хотя предыдущий метод во многих случаях полезен, он не работает рекурсивно. Он считает файлы и папки на первом уровне дерева папок, но эти папки, скорее всего, содержат другие файлы и папки внутри. Что, если вы хотите точно знать, сколько папок и файлов хранится внутри определенной папки и всех ее подпапок? Легкий способ найти эту информацию — использовать окно Свойства выбранной папки. Щелкните правой кнопкой мыши или коснитесь и удерживайте значок папки. В контекстном меню нажмите или коснитесь Свойства.
Обратите внимание, что еще более быстрый способ открыть окно свойств папки — выбрать его, а затем одновременно нажать клавиши Alt + Enter на клавиатуре.
Когда откроется окно «Свойства», Windows автоматически начнет подсчет файлов и папок внутри выбранной папки. Вы увидите эту информацию в поле «Содержит».
Метод 3. Используйте командную строку для рекурсивного подсчета всех файлов и папок
Вы также можете использовать командную строку. Чтобы подсчитать папки и файлы, хранящиеся в определенной папке, откройте командную строку и перейдите к этой папке. Для этого запустите команду cd [path] , где [путь] — это местоположение вашей папки. Вы можете увидеть пример на скриншоте ниже.
Затем, чтобы подсчитать все папки и файлы внутри родительской папки, выполните следующую команду:
После нажатия клавиши «Ввод» в командной строке будут перечислены все файлы и папки внутри родительской папки, и в конце она покажет вам сводку ее содержимого. В этом резюме также будет показано, сколько файлов и папок хранится в вашей папке. Обратите внимание, что эта информация рекурсивна — она включает в себя все подпапки и все файлы.
Метод 4. Используйте PowerShell для подсчета всех файлов и папок
Другим тривиальным способом подсчета файлов и папок, хранящихся в родительской папке, является использование PowerShell . Откройте окно PowerShell и направляйтесь в папку родительской папки. Запустите команду cd [path] , где [путь] — путь вашей папки. Вот пример:
Если вы хотите подсчитать все элементы внутри вашей папки, независимо от того, являются ли они файлами или папками, выполните следующую команду. Обратите внимание, что он не работает рекурсивным образом, он учитывает только элементы первого уровня.
Если вы хотите подсчитать только папки внутри родительской папки, выполните следующую команду:
Если вы хотите знать только количество файлов, запустите эту команду:
Если вы хотите рекурсивно подсчитывать папки и/или файлы в родительской папке, добавьте параметр Recurse в предыдущие команды следующим образом:
- Рекурсивно подсчитывать все файлы и папки: Get-ChildItem -Recurse | Measure-Object | % <$_.Count>Get-ChildItem -Recurse | Measure-Object | %
- Рекурсивно подсчитывать только папки: Get-ChildItem -Recurse -Directory | Measure-Object | % <$_.Count>Get-ChildItem -Recurse -Directory | Measure-Object | %
- Рекурсивно считать только файлы: Get-ChildItem -Recurse -File | Measure-Object | % <$_.Count>Get-ChildItem -Recurse -File | Measure-Object | %
Заключение
Если вы хотите точно знать, сколько файлов и папок находится в определенной папке с вашего компьютера под управлением Windows, теперь вы знаете, как это сделать. Как вы видели, есть несколько способов, которыми вы можете найти эту информацию, чтобы вы могли выбрать, что лучше подходит.
Максимальное количество открытых файлов (несерверная ОС).
Столкнулся тут с «забавным» сюрпризом.
В конфигурации рабочей станции (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 создаются как часы.
Вопрос — как можно увеличить число одновременно открытых файлов, чтобы оно хоть теоретически приближалось к установленному значению ?
(Пробовал на Windows 2000 и Windows Xp — результат от системы зависит мало).
Также хотелось бы знать, насколько в данном случае спасёт дело серверная ОС или, на крайняк, SMB-на Linux ?
P.S. под рукой серверной Оси нет, а на рабочих системах ставить «эксперименты» не дадут.
>>Вопрос — как можно увеличить число одновременно открытых файлов, чтобы оно хоть теоретически приближалось к установленному значению
HKLM\System\CurrentControlSet\Control\Session Manager\Memory Management.
Параметр IoPageLockLimit (REG_DWORD) = 65536 (Decimal) /10000 (Hex)
HKLM\System\CurentControlSet\Servises\lanmanserver\parameters.
Параметр Size (Dword) = 3
HKLM\System\CurentControlSet\Control\Session Manager\Memory Menegment
Параметр LargeSystemCache (Dword) = 1
(6) А насколько выше ? Просто, если там хотя бы 65536 можно, то можно задуматься о серверной ОС, а если там получается 8192 (предполагая, что 16384->65536 даёт 2048->8192) то нафиг такая «серверная» Ось.
(7) У меня — именно открыты, причём на запись.
(9) Вот как раз об этом и думаю, так как про Windows мнение, которая здесь цензура вырезает.
(10) Попробую поиграться параметрами.
P.S. вот такими «засадами» и «сюрпризами» вас всегда «радует» Microsoft.
(11) Во всем виноват Гейтс!
Зачем требовать от настольной ОС функционала и ресурсов серверной ОС?
Все на самом деле довольно просто (конечно если не залазить в дебри).
Если объяснять совсем просто то Win XP Home/Prof система управления памятью не заточена на серверные задачи, в т.ч. на файл-сервер. Конечно расшарить папки можно, но работать будет хуже чем на серверной ОС. В твоем случае система не выделяет достаточно памяти для открытия максимального количества файлов. А выделяет на «2709 или около того», при подключении с другого компьютера видимо отдается весь оставшийся резерв на «ещё 30-40 файлов»