2013-10-11 120 views
2

我在Sitecore CMS中遇到了相當耗時的問題。Sitecore - 無應用程序池回收

是否有可能縮短每次在bin文件夾或web.config中進行更改時應用程序池回收所花費的時間?

服務器需要2到5分鐘才能在更改後立即作出響應。

任何想法?

+0

我目前正在客戶端的網站上遇到類似問題,我很好奇 - 您是否在使用Lucene索引,它們有多大? (均爲文檔數量和文件大小)。我有一個暗示,Sitecore在啓動時將大量時間加載到內存中。 – mmmeff

回答

4

有從Sitecore的亞歷克斯在這裏一個shyba文章Reducing Sitecore Startup time

總結文章是

  • 在machine.config中:禁止處理檢查裝配簽署
<runtime> 
    <generatePublisherEvidence enabled="false"/> 
</runtime> 
  • 禁用p Sitecore網站中的性能計數器。配置
<setting name="Counters.Enabled" value="false" /> 

有很多的改進Sitecore的性能文章中,我列出以下幾個環節:

+0

在MSDN上它說這個元素不會影響.NET 4之後的程序集加載時間。我不確定這是否仍然適用。 – kamranicus

+0

@subkamran我現在正在使用.Net 4.5,而且我仍然在Sitecore 7.2中遇到同樣的問題。 –

+0

@ SachinB.R。如果你沒有在開發環境中使用分析,即不在Sitecore DMS的東西上工作,那麼你可以禁用這個設置:'。它位於'Sitecore.Analytics.config'中,這會有所幫助。 –

1

他需要重新啓動應用程序池才能加載新的dll。
你可以儘量減少你在啓動時做的事情(但我猜這主要是你無法影響的sitecore東西)所以我可以給出的最好的建議是有2個內容切換的網絡服務器。

您可以在2臺服務器上運行應用程序,並且內容切換決定哪個服務器處理哪個請求(因爲每個服務器都不知道其他服務器,所以請小心會話和靜態)。
如果在某些時候您需要發佈新版本,您只需指示您的內容切換將所有流量導向到Web服務器A.然後,您可以部署到Web服務器B,通過不通過內容切換的直接網址打開網站,以及確保它正常工作+預熱。
然後你告訴內容交換機將所有的交換指向B,並且你有足夠的時間來更新web服務器A並將內容交換機切換回正常模式。

+0

也許我說錯了,回收是不可避免的,但整個過程似乎對我來說太長。我能以某種方式縮短它嗎? – Ted

+0

除了升級硬件或使用內容切換之外,您只能查看您控制的代碼。回收後,應用程序池將再次實例化,因此請查看在應用程序啓動時運行的代碼,並確保它儘可能少。 – Kristof

0

您可以按照Alex Shyba's post here

不過2-5分鐘聽起來很極端。這是不正常的。你的硬件是否是最新的? 另外,我會着眼於預取緩存。在您的開發環境中,您可能不希望我在啓動時獲得太多,因爲這在開發過程中不需要。

我也會看看initialize pipeline和global.asax,看看你是否在做任何自定義的啓動工作。

0

您可以減少預取的核心,掌握和網絡數據庫高速緩存的大小,但不建議這樣做,在生產服務器上做到這一點只在開發機器,不是。

1

我也有這個問題。

無論出於何種原因,我的本地副本將花費大約5分鐘的時間,在完成任何更改或啓動網站新鮮後完全啓動。測試任何東西絕對是可怕的。這只是本地的一個問題。我的開發服務器環境和生產似乎沒有受到影響。

我發現了一個分析工具,該工具允許我找到一個異常值控制,並且需要花費大量的時間進行渲染。試試這個......

  1. 編譯後啓動你的網站。
  2. 登錄此管理頁面:http://local.example.com/sitecore/admin/stats.aspx
  3. 您會看到類似這樣的屏幕:Sitecore Admin Page Content performance statistics查找帶有低下Avg或Max時間的任何內容。你的問題可能會在邏輯上。作爲獎勵,如果您在長時間重新編譯之後仍然可以不停地點擊頁面,那麼您應該注意到,如果您的問題與我的問題類似,則平均時間大概會將您的問題控制的每個頁面減半。

在我的情況下,我發現最大的問題來自一個控件,它正在爲一個項目進行昂貴的搜索。 它看起來像這樣 - >Sitecore.Context.Database.SelectItems("" + Sitecore.Context.Item.Paths.Path + "/ancestor-or-self::*[@@templateid='" + templateId + "']"); 這主要是一個本地問題,因爲SQL服務器對我的機器是遠程的,而其他服務器在同一個建築物中。因此開發和生產相對不受影響。

祝你好運!

+0

而您將這個緩慢的XSLT查詢替換爲像Sitecore Fast Query之類的其他內容?如果項目路徑包含一個破折號字符 - 或另一個保留字,則此查詢也包含一個錯誤。你需要用# –

+0

來代替它,而不是以這種方式進行搜索,而是將它烘焙成一些從Sitecore.Context.Item中去掉的邏輯,其中遞歸檢查父項所在的模板是否爲我一直在尋找相同的ID。 –

+0

@JanBluemink我知道你是對的逃避角色。這使得俄勒岡州或'一個非常有趣的國家有一個着陸頁。 :) –

相關問題