偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

服務(wù)器端編程的十大性能問(wèn)題

開(kāi)發(fā)
文章作者Andreas Grabner根據(jù)自己的工作經(jīng)驗(yàn),列舉了過(guò)去他曾遇到過(guò)的服務(wù)器端編程的十大性能問(wèn)題,希望這些問(wèn)題能給廣大讀者帶來(lái)一定的啟示。

51CTO之前曾報(bào)道過(guò)《“殺死”你的服務(wù)器的6種方法》,分析了在網(wǎng)站后臺(tái)重構(gòu)過(guò)程中容易讓服務(wù)器宕機(jī)的六種情況,本文作者則列舉了其在過(guò)去幾年工作中所遇到的服務(wù)器端編程的十大性能問(wèn)題。

問(wèn)題一:過(guò)多的數(shù)據(jù)庫(kù)調(diào)用

我們發(fā)現(xiàn)經(jīng)常出現(xiàn)的一個(gè)問(wèn)題就是在每次請(qǐng)求/事務(wù)中存在過(guò)多的數(shù)據(jù)庫(kù)查詢。有如下三個(gè)場(chǎng)景作為佐證:

◆在一次事務(wù)上下文中所請(qǐng)求的數(shù)據(jù)比實(shí)際需要的數(shù)據(jù)多出很多。比如說(shuō):請(qǐng)求所有的賬戶信息而不是僅僅查詢出當(dāng)前需要顯示的信息。

◆多次請(qǐng)求同樣的數(shù)據(jù)。這種情況通常發(fā)生在相同事務(wù)中的不同組件之間是彼此獨(dú)立的,而每個(gè)組件都會(huì)請(qǐng)求同樣的數(shù)據(jù)。我們并不清楚當(dāng)前上下文中已經(jīng)加載了哪些數(shù)據(jù),最后只得多次發(fā)出同樣的查詢。

◆發(fā)出多個(gè)查詢語(yǔ)句以獲得某一數(shù)據(jù)集。通常這是由于沒(méi)有充分利用到復(fù)雜的SQL語(yǔ)句、存儲(chǔ)過(guò)程等在一次批處理中獲取需要的數(shù)據(jù)所導(dǎo)致的。

問(wèn)題二:過(guò)多地使用同步

毫無(wú)疑問(wèn),同步對(duì)于應(yīng)用中共享數(shù)據(jù)的保護(hù)來(lái)說(shuō)是至關(guān)重要的舉措。但有很多開(kāi)發(fā)者卻過(guò)度使用同步,比如在超大段的代碼中使用同步。在低負(fù)載的情況下,這么做倒沒(méi)什么問(wèn)題;但在高負(fù)載或是產(chǎn)品環(huán)境下,過(guò)度的同步會(huì)導(dǎo)致嚴(yán)重的性能與可伸縮性問(wèn)題。

問(wèn)題三:過(guò)度使用遠(yuǎn)程調(diào)用

很多庫(kù)都使用了遠(yuǎn)程通信。對(duì)于開(kāi)發(fā)者來(lái)說(shuō),遠(yuǎn)程調(diào)用與本地調(diào)用似乎沒(méi)什么區(qū)別,但如果不清楚遠(yuǎn)程調(diào)用的本質(zhì)就會(huì)鑄成大錯(cuò),因?yàn)槊恳淮芜h(yuǎn)程調(diào)用都會(huì)涉及到延遲、序列化、網(wǎng)絡(luò)堵塞以及內(nèi)存使用等問(wèn)題。如果沒(méi)有經(jīng)過(guò)深思熟慮而盲目使用這些遠(yuǎn)程技術(shù)就會(huì)導(dǎo)致嚴(yán)重的性能與可伸縮性問(wèn)題。

問(wèn)題四:錯(cuò)誤地使用對(duì)象關(guān)系映射

對(duì)象關(guān)系映射為開(kāi)發(fā)者解決了很多負(fù)擔(dān),比如從數(shù)據(jù)庫(kù)中加載對(duì)象以及將對(duì)象持久化到數(shù)據(jù)庫(kù)中。但與其他任何框架一樣,對(duì)象關(guān)系映射也有很多配置選項(xiàng)需要優(yōu)化,只有這樣才能適應(yīng)于當(dāng)前應(yīng)用的需要。錯(cuò)誤的配置與不正確的使用都會(huì)導(dǎo)致始料不及的性能問(wèn)題。在使用對(duì)象關(guān)系映射框架前,請(qǐng)務(wù)必保證熟悉所有的配置,如果有機(jī)會(huì),請(qǐng)深入到所用框架的內(nèi)核,這樣使用起來(lái)才有保障。

問(wèn)題五:內(nèi)存泄漏

托管的運(yùn)行時(shí)環(huán)境(如Java和.NET)可以通過(guò)垃圾收集器進(jìn)行內(nèi)存管理。但垃圾收集器無(wú)法避免內(nèi)存泄漏問(wèn)題。“被遺忘”的對(duì)象依舊會(huì)占據(jù)著內(nèi)存,最終將會(huì)導(dǎo)致內(nèi)存泄漏問(wèn)題。當(dāng)對(duì)象不再需要時(shí),請(qǐng)盡快釋放掉對(duì)象引用。

問(wèn)題六:使用有問(wèn)題的第三方代碼/組件

沒(méi)有人會(huì)從頭編寫(xiě)應(yīng)用的全部功能。我們都會(huì)使用第三方程序庫(kù)來(lái)加快開(kāi)發(fā)進(jìn)程。這么做不僅會(huì)加速產(chǎn)出,也增加了性能上的風(fēng)險(xiǎn)。雖然大多數(shù)框架都具有良好的文檔并且經(jīng)過(guò)了充分的測(cè)試,但沒(méi)人能夠保證這些框架在任何時(shí)候都會(huì)像預(yù)期的那樣好。因此,在使用這些第三方框架時(shí),事先一定要做好充分的調(diào)研。

問(wèn)題七:對(duì)稀缺資源的使用存在浪費(fèi)的情況

內(nèi)存、CPU、I/O以及數(shù)據(jù)庫(kù)等資源屬于稀缺資源。在使用這些資源時(shí)如果存在浪費(fèi)的情況就會(huì)造成嚴(yán)重的性能與可伸縮性問(wèn)題。比如說(shuō),有人會(huì)長(zhǎng)時(shí)間打開(kāi)數(shù)據(jù)庫(kù)連接而不關(guān)閉。連接應(yīng)該只在需要的時(shí)候才使用,使用完畢后就應(yīng)該放回到連接池中。我們經(jīng)常看到有人在請(qǐng)求一開(kāi)始就去獲取連接,直到最后才釋放,這么做會(huì)導(dǎo)致性能瓶頸。

問(wèn)題八:膨脹的Web前端

由于現(xiàn)在的Web速度越來(lái)越快,用戶的網(wǎng)絡(luò)體驗(yàn)也越來(lái)越好。在這個(gè)趨勢(shì)下,很多應(yīng)用的前端都提供了太多的內(nèi)容,但這么做會(huì)導(dǎo)致差勁的瀏覽體驗(yàn)。很多圖片都太大了,沒(méi)有利用好或是錯(cuò)誤地使用了瀏覽器緩存、過(guò)度地使用JavaScript/AJAX等,所有這一切都會(huì)導(dǎo)致瀏覽器的性能問(wèn)題。

問(wèn)題九:錯(cuò)誤的緩存策略導(dǎo)致過(guò)度的垃圾收集

將對(duì)象緩存在內(nèi)存中可以避免每次都向數(shù)據(jù)庫(kù)發(fā)出請(qǐng)求,這么做可以提升性能。但如果緩存了太多的對(duì)象,或是緩存了很多不常使用的對(duì)象則會(huì)將緩存的這種優(yōu)勢(shì)變成劣勢(shì),因?yàn)檫@會(huì)導(dǎo)致過(guò)高的內(nèi)存使用率及過(guò)多的垃圾收集活動(dòng)。在實(shí)現(xiàn)緩存策略前,請(qǐng)想好哪些對(duì)象需要緩存,哪些對(duì)象不需要緩存,進(jìn)而避免這類性能與可伸縮性問(wèn)題。

問(wèn)題十:間歇性問(wèn)題

間歇性問(wèn)題很難發(fā)現(xiàn)。通常這類問(wèn)題與特定的輸入?yún)?shù)有關(guān),或是發(fā)生在某個(gè)負(fù)載條件下。完全的測(cè)試覆蓋率及負(fù)載與性能測(cè)試能在這些問(wèn)題產(chǎn)生前就發(fā)現(xiàn)他們。

原文作者:Andreas Grabner

原文鏈接:http://blog.dynatrace.com/2010/06/15/top-10-performance-problems-taken-from-zappos-monster-and-co/

作者介紹

Andreas Grabner,是一名具有10年以上編程經(jīng)驗(yàn)的Java/.Net開(kāi)發(fā)工程師,他目前是職位是dynaTrace軟件公司技術(shù)團(tuán)隊(duì)的負(fù)責(zé)人。

【編輯推薦】 

  1. “殺死”你的服務(wù)器的6種方法
  2. 大型B2C網(wǎng)站高性能可伸縮架構(gòu)技術(shù)探秘
  3. 世界最大的PHP站點(diǎn) Facebook后臺(tái)技術(shù)探秘
  4. 更好的選擇 細(xì)數(shù)Apache服務(wù)器的四個(gè)替代者

 

責(zé)任編輯:王曉東 來(lái)源: InfoQ
相關(guān)推薦

2010-11-18 16:23:33

2020-06-02 14:57:06

Linux服務(wù)器架構(gòu)

2009-07-29 15:48:45

2009-08-26 09:09:46

服務(wù)器維護(hù)錯(cuò)誤

2021-09-09 10:40:12

服務(wù)器虛擬化數(shù)據(jù)中心

2016-01-05 16:29:23

服務(wù)器虛擬化

2010-10-15 08:57:15

PHP多進(jìn)程

2021-07-27 06:14:32

服務(wù)器端移動(dòng)端性能測(cè)試

2013-08-01 10:07:37

服務(wù)器虛擬化虛擬化

2010-02-22 10:35:05

服務(wù)器虛擬化

2010-01-08 13:54:17

JSON 性能

2010-07-27 09:16:49

2013-06-21 14:36:02

JavaEEx性能

2010-11-11 09:51:38

服務(wù)器虛擬化

2013-01-10 10:07:54

2010-12-21 12:08:08

服務(wù)器處理器CPU

2011-07-26 11:07:08

JavaScript

2013-12-25 11:01:16

JavaScript

2015-10-27 09:40:31

TCPIP網(wǎng)絡(luò)協(xié)議

2009-08-26 09:44:18

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)