Назначение сценария: благодаря нашей инфраструктуре Active Directory мы добавляем около 6000 записей непосредственно в список информации о пользователях сайта, чтобы они отображались в адресной книге в средстве выбора людей SharePoint.
Сценарий создает около 6000 объектов SPUser, чтобы добавить их в список информации о пользователях сайта. Большинство из них уже существуют, в этом случае new-SPUser ничего не должен делать, верно?
РЕДАКТИРОВАТЬ: пожалуйста, оставьте отзыв или возможное решение. Я удалил часть большого журнала для лучшего обзора и добавил некоторые детали. Возможно, вы знаете другой форум, где я должен опубликовать этот вопрос?
Я получаю много сообщений, подобных этому:
Потенциально чрезмерное количество объектов SPRequest (20) в настоящее время
невыпущено в потоке 9. Убедитесь, что этот объект или его родитель (
как SPWeb или SPSite) должным образом утилизируется. Этот объект
держась за отдельную родную кучу. Этот объект не будет
автоматически утилизируется. Идентификатор распределения для этого объекта: {... snip ...} Stack
след текущего распределения: в
Microsoft.SharePoint.SPGlobal.CreateSPRequestAndSetIdentity (SPSite
site, строковое имя, логическое значение bNotGlobalAdminCode, String strUrl, логическое значение
bNotAddToContext, Byte [] UserToken, String userName, Boolean
bIgnoreTokenTimeout, Boolean bAsAnonymous)
... чик ...
И много таких сообщений:
08/17/2011 19: 38: 35.26 PowerShell.exe (0x1388) 0x20C0 Производительность SharePoint Foundation nask Мониторинг Объект SPRequest был освобожден сборщиком мусора вместо явного освобождения. Чтобы избежать напрасной траты системных ресурсов, утилизируйте этот объект или его родительский объект (например, SPSite или SPWeb), как только вы закончите использовать его. Идентификатор распределения: {09C61E87-2BA1-4CEA-BB3C-266A1345559A} Чтобы определить, где был размещен этот объект, установите Microsoft.SharePoint.Administration.SPWebService.ContentService.CollectSPRequestAllocationCallStacks = true. de663eab-8063-4381-88b5-01cc50d51b77
Это текущий скрипт с выделенными четырьмя строками (# ***
), который мы добавили для его решения (не сработало).
Write-Host "Fill Site User Info List for "$args[0]
add-pssnapin microsoft.sharepoint.powershell -ErrorAction SilentlyContinue
Start-SPAssignment -Global # ***
#global properties
$ppFilter = "(...)"
get-date
$ldapFilter = "(...)"
$ldapDirectory = "LDAP://DC=..."
Write-Host "Get all users from ..."
$de = New-Object system.directoryservices.directoryentry($ldapDirectory)
$de
$newsearch = New-Object System.DirectoryServices.DirectorySearcher($de)
write-host "Filter all active users with ..."
$newsearch.Filter = $ldapFilter
$newsearch.PageSize = 200
$result = $newsearch.FindAll()
write-Host "Get all domain user accounts..."
$useraccounts = $result | % {"..."}
$siteCollection = get-spsite $args[0]
$webApp = $siteCollection.WebApplication
Write-Host "clear people picker filter" $webApp.Name "..."
$webApp.peoplepickersettings.ActiveDirectoryCustomFilter = ""
$webApp.Update()
write-Host "---------------"
$siteUrl = $siteCollection.Url
Write-Host "add "$useraccounts.Count" users to site collection "$siteUrl "..."
$start = get-date
$site = $siteCollection.RootWeb # ***
foreach ($user in $useraccounts) {
$current = New-SPUser -UserAlias $user -Web $site # *** was before: $siteUrl
}
$end = get-date
$end - $start
$SiteCollection.Dispose()
Write-Host "---------------"
Write-Host "set people picker filter to" $ppFilter "..."
$webApp.peoplepickersettings.ActiveDirectoryCustomFilter = $ppFilter
$webApp.Update()
Stop-SPAssignment -Global # ***
Write-Host "Done."
get-date
Есть ли очевидная ошибка, которую мы сделали? Спасибо за любые предложения.
В ответ на @ x0n я публикую большую часть журнала. Извините за это нечитаемое форматирование. Есть ли лучший способ публикации логов? Все разрывы строк и табуляции перепутаны.
Дело в том, что сообщения об исправленном объекте SPRequest поступают из процесса powershell. Я абсолютно уверен, что этот скрипт был единственным запущенным. Этот скрипт раньше заканчивался менее чем за 10 минут, но теперь он не завершается даже через 1,5 часа. Я почти уверен, что ничего не изменил в сценарии, который изменил поведение. Представление производительности диспетчера задач Windows показало умеренную нагрузку на процессор и довольно высокое использование оперативной памяти (не до 100%) во время работы сценария.
Метка времени Тип области TID Область EventID Корреляция сообщений
17.08.2011 19: 38: 34.30 PowerShell.exe (0x1388) 0x20C0 SharePoint Foundation PowerShell 6tf0 Средний Ввод Метод конечной обработки New-SPUser.
17.08.2011 19: 38: 34.30 PowerShell.exe (0x1388) 0x20C0 SharePoint Foundation PowerShell 6tf0 Средний конечный метод обработки конечного пользователя для New-SPUser.
17.08.2011 19: 38: 34.30 PowerShell.exe (0x1388) 0x20C0 SharePoint Foundation PowerShell 6tf0 Средний Начальный метод вводаПроцесс New-SPUser. de663eab-8063-4381-88b5-01cc50d51b77
17.08.2011 19: 38: 34.30 PowerShell.exe (0x1388) 0x20C0 SharePoint Foundation PowerShell 6tf0 Начало среднего уровня Метод обработки New-SPUser. de663eab-8063-4381-88b5-01cc50d51b7717.08.2011 19: 38: 34.30 PowerShell.exe (0x1388) 0x20C0 SharePoint Foundation PowerShell 6tf0 Средний Ввод ProcessRecord Метод New-SPUser. de663eab-8063-4381-88b5-01cc50d51b77
17.08.2011 19: 38: 34.30 PowerShell.exe (0x1388) 0x20C0 Производительность SharePoint Foundation naqx Отслеживаемый Потенциально избыточное количество объектов SPRequest (19) в настоящее время не выпущено в потоке 9. Убедитесь, что этот объект или его родитель (например, SPWeb или SPSite) должным образом утилизируется. Этот объект удерживается в отдельной собственной куче. Этот объект не будет автоматически удален. Идентификатор выделения для этого объекта: {815F9A3D-6635-42FA-9658-B6294968136E} Трассировка стека текущего выделения: в Microsoft.SharePoint.SPGlobal.CreateSPRequestAndSetIdentity (сайт SPSite, имя строки, логическое значение bNotGlobalAdminrode, StringTound, String UserToken, String userName, Boolean bIgnoreTokenTimeout, Boolean bAsAnonymous) в Microsoft.SharePoint.SPRequestManager.GetContextRequest (режим проверки подлинности SPRequestAuthenticationMode) в Microsoft.SharePoint.Administration.SPFarm.g ... de663eab-51b80807788063-773-803-805-959-8063
(.... snip ....)
08/17/2011 19: 38: 34.30 PowerShell.exe (0x1388) 0x20C0 Производительность SharePoint Foundation naqx Отслеживаемый Потенциально избыточное количество объектов SPRequest (19) в настоящее время не выпущено в потоке 9. Убедитесь, что этот объект или его родитель (например, SPWeb или SPSite) должным образом утилизируется. Этот объект держится за отдельную собственную кучу. Идентификатор распределения для этого объекта: {F9CDF3DA-41B1-485D-B78F-0266545C417A} Трассировка стека текущего выделения: в Microsoft.SharePoint.SPGlobal.CreateSPRequestAndSetIdentity (сайт SPSite, имя строки, логическое значение bNotGlobalAdminTortOnttext, кодировка, булевый тип String, бранд UserToken, String userName, Boolean bIgnoreTokenTimeout, Boolean bAsAnonymous) в Microsoft.SharePoint.SPWeb.InitializeSPRequest () в Microsoft.SharePoint.SPWeb.InitWebPublic () в Microsoft.SharePoint.SPWeb.get_Exists () в Microsoft PowerSPoint. Rea ... de663eab-8063-4381-88b5-01cc50d51b77
(... snip ...)
(... многие из этих сообщений:)
17.08.2011 19: 38: 35.26 PowerShell.exe (0x1388) 0x20C0 Производительность SharePoint Foundation nask Мониторинг Объект SPRequest был восстановлен сборщиком мусора вместо явного освобождения. Чтобы избежать напрасной траты системных ресурсов, утилизируйте этот объект или его родительский объект (например, SPSite или SPWeb), как только вы закончите использовать его. Идентификатор распределения: {09C61E87-2BA1-4CEA-BB3C-266A1345559A} Чтобы определить, где был размещен этот объект, установите Microsoft.SharePoint.Administration.SPWebService.ContentService.CollectSPRequestAllocationCallStacks = true. de663eab-8063-4381-88b5-01cc50d51b77