User Profile Service(以下简称UPS)可能是SharePoint 2010中最头疼的服务之一了,问题多多。
在创建这个服务阶段会产生一系列问题。还好大神Spencer Harbar发表了一系列的博文来解决这个问题。精华都在Rational Guide to implementing SharePoint Server 2010 User Profile Synchronization。
只要照着这个弄,没有解决不了的。
问题是对于一个服务器场存在不是一天两天的事情,这个服务太脆弱了,经常莫名其妙的挂。如果UPS服务挂了,所有访问User Profile Manager的代码都会异常。包括SharePoint自己的Welcome控件。
比如我项目中的一个服务器场,4台前段,2台应用服务器,一共6台服务器跑。一共6个同样的服务负载均衡。运行久了,部分服务器就会出现这个服务变成Starting的情况,并且街面上没有办法停止这个状态。
如下图所示:
事件日志中会产生类似SharePoint Web Services Round Robin Service Load Balancer Event: EndpointFailure错误信息。
ULS日志中没有特别明显的信息。
我到现在也不知道具体有什么样的原因会导致这个服务挂掉。可能是因为这个服务的负载比较大?
为了解决这个问题,只能 PowerShell来访问到这个服务,进行强制的初始化。
利用下面的命令来获取到当前服务器场所有的UPS服务实例:
$UPSInstances = Get-SPServiceInstance | ? {$_.GetType().ToString() -eq "Microsoft.Office.Server.Administration.UserProfileServiceInstance"}
利用下面命令来获得状态异常的UPS服务实例:
$StuckUPSInstances = $UPSInstances | ? {$_.Status -ne "Online"}
例如下面命令来重新初始化/启动UPS服务实例:
$StuckUPSInstances | ForEach-Object -Process { $_ | Start-SPServiceInstance }
等一会儿,就会看到服务就重新启动好了。