使用活动目录组的网站会间歇性地减慢爬网速度

时间:2011-10-25 15:05:45

标签: active-directory ldap-query

我在Intranet上有一个asp.net mvc网站。对站点的访问权限由活动目录中的组确定。有4个不同的组,每个组在站点中具有不同的访问权限。我偶尔会遇到网站运行缓慢的问题。该网站将运行好几天,然后突然慢慢爬行。我有一个测试站点和一个生产站点。当发生减速时,两个站点都会受到同等影响。我还有一个测试站点,该站点没有活动目录访问权限,并且在这两个站点正在爬行时它运行没有问题。我遇到问题的网站在用户帐户下运行,因为应用程序必须联系Intranet上的另一个共享才能打印和合并pdf文件。这些站点在同一应用程序池下运行。出现问题时,即使没有数据库活动的页面,所有页面也同样慢。出现问题时,我重置IIS,重新启动网站,并回收线程。实际解决问题的唯一方法是重新启动服务器。有时需要额外重启才能使网站恢复正常。以下是我尝试过的一些事情。似乎问题发生的次数较少,但仍然会发生。 1.减少查询活动目录的次数。 2.出现问题时重置IIS。这没有帮助。 3.回收应用程序池。 4.重新启动sql server服务 5.确保在引用服务器时使用完全限定名称。这似乎减少了一些问题。不过不确定。我在Windows 2008服务器上使用IIS 7,64位。

 user = ConfigurationManager.AppSettings["TravelCardUser.AD_GroupName"];
            approver = ConfigurationManager.AppSettings["TravelCardApprover.AD_GroupName"];
            maintenance = ConfigurationManager.AppSettings["TravelCardMaintenance.AD_GroupName"];
            admin = ConfigurationManager.AppSettings["TravelCardAdmin.AD_GroupName"];
            testuser = ConfigurationManager.AppSettings["TestUser"];


            List<string> adgroups = new List<string>();
            adgroups.Add(admin);
            adgroups.Add(approver);
            adgroups.Add(maintenance);
            adgroups.Add(user);
            this.groups = adgroups;


            List<string> groupmembership = new List<string>();

            foreach (var group in groups)
            {

                if (!String.IsNullOrEmpty(testuser))
                {
                    this.username = testuser;
                }
                else
                {
                    this.username = currentloggedinuser;
                }
                using (var ctx = new PrincipalContext(ContextType.Domain))
                using (var groupPrincipal = GroupPrincipal.FindByIdentity(ctx, group))

                using (var userPrincipal = UserPrincipal.FindByIdentity(ctx, username))
                {
                    if (groupPrincipal != null)
                    {
                        try
                        {
                            if (userPrincipal.IsMemberOf(groupPrincipal))
                            {
                                groupmembership.Add(group);

                            }
                        }
                        catch (Exception ex)
                        {
                            string theexception = ex.ToString();
                        }
                    }


                }

            }

这是我的ldap连接字符串。

  <add name="ADConnectionString_UserRole" connectionString="LDAP://locationX/cn=TravelCardUser,ou=LocationXgroupsGroups,dc=acme,dc=us,dc=com" />

1 个答案:

答案 0 :(得分:0)

Ther服务器每3或4天放慢速度,因此我将应用程序池关闭到我的应用程序,并使用Sysinternals监视进程3天。

http://technet.microsoft.com/en-us/sysinternals/bb896653

我看到与sequ​​al服务器和团队基础服务器相关的进程正在抓取资源但不释放它们。顺便说一句,我通过Red Gate Memory Profiler运行我的asp.net代码,没有内存泄漏。现在我必须弄清楚如何处理内存使用问题。