Laden...

Webserver seit Liveschaltung völlig ausgelastet

Erstellt von Michael Schuler vor 13 Jahren Letzter Beitrag vor 13 Jahren 1.844 Views
M
Michael Schuler Themenstarter:in
329 Beiträge seit 2004
vor 13 Jahren
Webserver seit Liveschaltung völlig ausgelastet

Hallo Community

Seit einem halben Jahr arbeite ich an einem Projekt, welches am 2. Januar veröffentlicht wird. Seit heute, 1. Januar, sind die switch-Umstellungen (switch.ch ist die Schweizer Domain-Registrierungsstelle) gemacht und seit dann ist die Seite permanent überlastet. Auf dem Server läuft der w3wp.exe Dienst auf 100% und das arbeiten ist fast unmöglich.

Bis gestern hatten wir gar keine Probleme, aber seit der Umstellung geht gar nichts mehr. Wir haben temporär eine index.html Seite erstellt, die anzeigt, dass die Seite derzeit umgestellt wird. Für die index.html Seite habe ich im UrlRewritig die DefaultPage auf index.html gesetzt.


<urlrewritingnet rewriteOnlyVirtualUrls="true" contextItemsPrefix="QueryString" defaultPage="index.html" defaultProvider="RegEx" xmlns="http://www.urlrewriting.net/schemas/config/2006/07">

Zum einen sehe ich in den IIS-Logs diverse Anfragen von Bots, die jedoch alle mit 404 beantwortet werden, da es diese Files nicht mehr gibt.
Zum anderen wird an manchen Stellen via Javascript ein WCF Service aufgerufen mittels DOMAIN/CalenderService.svc/js.

Meist erhalte ich ThreadAbortExceptions von NHibernate, kann aber nicht wirklich einen Fehler beim NHibernate finden. Ich nutze übrigens FluentNHibernate. Zudem habe ich an NHibernate-Mapping ja nichts geändert, seit der Umstellung.

Mittels dem EQATEC-Profiler versuchte ich herauszufinden, wo das Problem liegen könnte, fand aber nichts spezifisches.

Meine grösste Bitte: Wie kann ich den Fehler näher eingrenzen? Wie finde ich heraus, wo das Problem liegt? Gibt es Tools oder Logfiles, die mir weiterhelfen könnten?

Liebe Grüsse
Michael

Anhang

Häufige Exceptions aus dem Logfile


01.01.2011 19:45:45|Error|General|WIN-PRNQ2O17GTP|Type: HttpUnhandledException
Message: Exception of type 'System.Web.HttpUnhandledException' was thrown.
Source: System.Web
   at System.Web.UI.Page.HandleError(Exception e)
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   at System.Web.UI.Page.ProcessRequest(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
   at System.Web.UI.Page.ProcessRequest()
   at System.Web.UI.Page.ProcessRequest(HttpContext context)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Inner Exception:
Type: ADOException
Message: could not execute query
[ select website0_.Id as Id34_, website0_.Guid as Guid34_, website0_.Name as Name34_, website0_.DefaultPageId as DefaultP4_34_, website0_.DefaultDomainId as DefaultD5_34_ from Website website0_ inner join Domain domains1_ on website0_.Id=domains1_.WebsiteId where domains1_.Name like ? ]
  Name:domain - Value: ?
[SQL: select website0_.Id as Id34_, website0_.Guid as Guid34_, website0_.Name as Name34_, website0_.DefaultPageId as DefaultP4_34_, website0_.DefaultDomainId as DefaultD5_34_ from Website website0_ inner join Domain domains1_ on website0_.Id=domains1_.WebsiteId where domains1_.Name like ?]
Source: NHibernate
   at NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters)
   at NHibernate.Loader.Loader.ListIgnoreQueryCache(ISessionImplementor session, QueryParameters queryParameters)
   at NHibernate.Hql.Ast.ANTLR.Loader.QueryLoader.List(ISessionImplementor session, QueryParameters queryParameters)
   at NHibernate.Hql.Ast.ANTLR.QueryTranslatorImpl.List(ISessionImplementor session, QueryParameters queryParameters)
   at NHibernate.Engine.Query.HQLQueryPlan.PerformList(QueryParameters queryParameters, ISessionImplementor session, IList results)
   at NHibernate.Impl.SessionImpl.List(String query, QueryParameters queryParameters, IList results)
   at NHibernate.Impl.SessionImpl.List(String query, QueryParameters parameters)
   at NHibernate.Impl.QueryImpl.List()
   at NHibernate.Impl.AbstractQueryImpl.UniqueResult[T]()
   at Cms.Bll.WebsiteService.GetByDomain(User user, String domain) in C:\Users\Michi\Documents\Programmieren\SVN Projekte\cms für gvc\Cms\Cms.Bll\MediaCenter\MediaContentService.cs:line 262
   at IWebsiteServiceProxy56420579342844c991e288056648cceb.InvocationGetByDomain_1.InvokeMethodOnTarget()
   at Cms.Contracts.Interceptors.LoggingInterceptor.Intercept(IInvocation invocation) in C:\Users\Michi\Documents\Programmieren\SVN Projekte\cms für gvc\Cms\Cms.Contracts\AclProviderService.cs:line 34
   at IWebsiteServiceProxy56420579342844c991e288056648cceb.GetByDomain(User user, String domain)
   at Cms.Web.BasePage.get_CurrentWebsite()
   at Cms.Web.BasePage.OnPreInit(EventArgs e)
   at System.Web.UI.Page.PerformPreInit()
   at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
Inner Exception:
Type: SqlException
Message: Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.
Source: .Net SqlClient Data Provider
   at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
   at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
   at System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error)
   at System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj)
   at System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket()
   at System.Data.SqlClient.TdsParserStateObject.ReadByte()
   at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
   at System.Data.SqlClient.SqlInternalConnectionTds.CompleteLogin(Boolean enlistOK)
   at System.Data.SqlClient.SqlInternalConnectionTds.LoginNoFailover(ServerInfo serverInfo, String newPassword, Boolean redirectedUserInstance, SqlConnection owningObject, SqlConnectionString connectionOptions, TimeoutTimer timeout)
   at System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, TimeoutTimer timeout, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance)
   at System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance)
   at System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection)
   at System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options)
   at System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject)
   at System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject)
   at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
   at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
   at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
   at System.Data.SqlClient.SqlConnection.Open()
   at NHibernate.Connection.DriverConnectionProvider.GetConnection()
   at NHibernate.AdoNet.ConnectionManager.GetConnection()
   at NHibernate.AdoNet.AbstractBatcher.Prepare(IDbCommand cmd)
   at NHibernate.AdoNet.AbstractBatcher.ExecuteReader(IDbCommand cmd)
   at NHibernate.Loader.Loader.GetResultSet(IDbCommand st, Boolean autoDiscoverTypes, Boolean callable, RowSelection selection, ISessionImplementor session)
   at NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies)
   at NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies)
   at NHibernate.Loader.Loader.DoList(ISessionImplementor session, QueryParameters queryParameters)

3.170 Beiträge seit 2006
vor 13 Jahren

Hallo,

Inner Exception:
Type: SqlException
Message: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.

Das würde ich auf jeden Fall mal überprüfen. Sieht aus als gäbe es keine Verbindung zur DB.

Gruß, MarsStein

Non quia difficilia sunt, non audemus, sed quia non audemus, difficilia sunt! - Seneca

M
Michael Schuler Themenstarter:in
329 Beiträge seit 2004
vor 13 Jahren

Hallo MarsStein

Danke für die schnelle Antwort. Es handelt sich bei der Datenbank um ein SqlServer 2008 R2 Express. Die DB befindet sich auf dem gleichen Server und hat eine durchschnittliche CPU-Auslastung von unter einem Prozent, daher liegt es kaum an der Datenbank 😦

Ich bin beim googeln auf das "One Session per Request"-Pattern gestossen, welches man mittels HttpHandler implementieren soll. Hat da jemand einen Vorschlag, wie man das am besten implementieren soll? Habe bisher Codesnippets für asp.net mvc gefunden, nicht für classic asp.net.

Liebe Grüsse
Michael

6.862 Beiträge seit 2003
vor 13 Jahren

Hallo,

die Exception sagt dir doch deutlich das das Problem an der Verbindung zur DB besteht - wieso gehst du dann davon aus, dass es daran nicht liegen kann? Selbst wenn die aufm gleichen Server liegt heißt das noch lange nicht das alles richtig für die Kommunikation mit der DB konfiguriert ist. Was ist in der DB Connection denn angegeben? Lokaler Instanzname, Hostname oder IP Adresse?

Baka wa shinanakya naoranai.

Mein XING Profil.

M
Michael Schuler Themenstarter:in
329 Beiträge seit 2004
vor 13 Jahren

Hallo talla

Der ConnectionString ist

Data Source=127.0.0.1;Initial Catalog=db;User ID=usr;Password=pw;MultipleActiveResultSets=true;

Wie bereits erwähnt, hat mich googeln, resp. bingen, auf das One Session per Request Pattern aufmerksam gemacht, das von NHibernate empfohlen wird. Ich habe dies nun mit einem HttpModule umgesetzt, was eine grosse Besserung bezüglich der Server-Last brachte.
Aktuell habe ich einzig noch ab und zu das Problem, dass ich eine LazyInitializationException erhalte. Aber nicht wirklich reproduzierbar. Kann es sein, dass die Session an den Objekten haften bleibt, wenn ich diese über Threadgrenzen hinweg in einem CacheService behalte?