调优 WebSphere Application Server V7 性能
2009-11-26 00:00:00 来源:WEB开发网 闂傚倸鍊搁崐鎼佸磹閹间礁纾归柟闂寸绾惧綊鏌熼梻瀵割槮缁炬儳缍婇弻鐔兼⒒鐎靛壊妲紒鐐劤缂嶅﹪寮婚悢鍏尖拻閻庨潧澹婂Σ顔剧磼閻愵剙鍔ょ紓宥咃躬瀵鎮㈤崗灏栨嫽闁诲酣娼ф竟濠偽i鍓х<闁绘劦鍓欓崝銈囩磽瀹ュ拑韬€殿喖顭烽幃銏ゅ礂鐏忔牗瀚介梺璇查叄濞佳勭珶婵犲伣锝夘敊閸撗咃紲闂佺粯鍔﹂崜娆撳礉閵堝洨纾界€广儱鎷戦煬顒傗偓娈垮枛椤兘骞冮姀銈呯閻忓繑鐗楃€氫粙姊虹拠鏌ュ弰婵炰匠鍕彾濠电姴浼i敐澶樻晩闁告挆鍜冪床闂備胶绮崝锕傚礈濞嗘挸绀夐柕鍫濇川绾剧晫鈧箍鍎遍幏鎴︾叕椤掑倵鍋撳▓鍨灈妞ゎ厾鍏橀獮鍐閵堝懐顦ч柣蹇撶箲閻楁鈧矮绮欏铏规嫚閺屻儱寮板┑鐐板尃閸曨厾褰炬繝鐢靛Т娴硷綁鏁愭径妯绘櫓闂佸憡鎸嗛崪鍐簥闂傚倷鑳剁划顖炲礉閿曞倸绀堟繛鍡樻尭缁€澶愭煏閸繃宸濈痪鍓ф櫕閳ь剙绠嶉崕閬嶅箯閹达妇鍙曟い鎺戝€甸崑鎾斥枔閸喗鐏堝銈庡幘閸忔﹢鐛崘顔碱潊闁靛牆鎳愰ˇ褔鏌h箛鎾剁闁绘顨堥埀顒佺煯缁瑥顫忛搹瑙勫珰闁哄被鍎卞鏉库攽閻愭澘灏冮柛鏇ㄥ幘瑜扮偓绻濋悽闈浶㈠ù纭风秮閺佹劖寰勫Ο缁樻珦闂備礁鎲¢幐鍡涘椽閸愵亜绨ラ梻鍌氬€烽懗鍓佸垝椤栫偛绀夐柨鏇炲€哥粈鍫熺箾閸℃ɑ灏紒鈧径鎰厪闁割偅绻冨婵堢棯閸撗勬珪闁逞屽墮缁犲秹宕曢柆宥呯闁硅揪濡囬崣鏇熴亜閹烘垵鈧敻宕戦幘鏂ユ灁闁割煈鍠楅悘鍫濐渻閵堝骸骞橀柛蹇旓耿閻涱噣宕橀纰辨綂闂侀潧鐗嗛幊鎰八囪閺岋綀绠涢幘鍓侇唹闂佺粯顨嗛〃鍫ュ焵椤掍胶鐓紒顔界懃椤繘鎼圭憴鍕彴闂佸搫琚崕鍗烆嚕閺夊簱鏀介柣鎰緲鐏忓啴鏌涢弴銊ュ箻鐟滄壆鍋撶换婵嬫偨闂堟刀銏犆圭涵椋庣М闁轰焦鍔栧鍕熺紒妯荤彟闂傚倷绀侀幉锟犲箰閸℃稑妞介柛鎰典簻缁ㄣ儵姊婚崒姘偓鐑芥嚄閸撲礁鍨濇い鏍仜缁€澶愭煥閺囩偛鈧摜绮堥崼鐔虹闁糕剝蓱鐏忣厾绱掗埀顒佸緞閹邦厾鍘梺鍓插亝缁诲啫顔忓┑鍫㈡/闁告挆鍕彧闂侀€炲苯澧紒鐘茬Ч瀹曟洟鏌嗗鍛唵闂佺鎻俊鍥矗閺囩喆浜滈柟鐑樺灥閳ь剛鏁诲畷鎴﹀箻閺傘儲鐏侀梺鍓茬厛閸犳鎮橀崼婵愭富闁靛牆楠搁獮姗€鏌涜箛鏃撹€块柣娑卞櫍瀹曟﹢顢欑喊杈ㄧ秱闂備線娼ч悧鍡涘箠閹板叓鍥樄闁哄矉缍€缁犳盯骞橀崜渚囧敼闂備胶绮〃鍡涖€冮崼銉ョ劦妞ゆ帊鑳堕悡顖滅磼椤旂晫鎳冩い顐㈢箻閹煎湱鎲撮崟顐ゅ酱闂備礁鎼悮顐﹀磿閸楃儐鍤曢柡澶婄氨閺€浠嬫煟閹邦厽绶查悘蹇撳暣閺屾盯寮撮妸銉ョ閻熸粍澹嗛崑鎾舵崲濠靛鍋ㄩ梻鍫熷垁閵忕妴鍦兜妞嬪海袦闂佽桨鐒﹂崝鏍ь嚗閸曨倠鐔虹磼濡崵褰熼梻鍌氬€风粈渚€骞夐敓鐘茬闁糕剝绋戝浠嬫煕閹板吀绨荤紒銊e劦濮婂宕掑顑藉亾閻戣姤鍤勯柛鎾茬閸ㄦ繃銇勯弽顐粶缂佲偓婢舵劖鐓ラ柡鍥╁仜閳ь剙鎽滅划鍫ュ醇閻旇櫣顔曢梺绯曞墲钃遍悘蹇e幘缁辨帡鍩€椤掍礁绶為柟閭﹀幘閸橆亪姊洪崜鎻掍簼缂佽鍟蹇撯攽閸垺锛忛梺鍛婃寙閸曨剛褰ч梻渚€鈧偛鑻晶顔剧磼閻樿尙效鐎规洘娲熼弻鍡楊吋閸涱垼鍞甸梻浣侯攰閹活亝淇婇崶顒€鐭楅柡鍥╁枂娴滄粓鏌熼悜妯虹仴闁逞屽墰閺佽鐣烽幋锕€绠婚柡鍌樺劜閻忎線姊洪崜鑼帥闁哥姵顨婇幃姗€宕煎┑鎰瘜闂侀潧鐗嗘鎼佺嵁濮椻偓閺屾稖绠涢弮鎾光偓鍧楁煟濞戝崬娅嶇€规洘锕㈤、娆戝枈鏉堛劎绉遍梻鍌欑窔濞佳囨偋閸℃稑绠犻柟鏉垮彄閸ヮ亶妯勯梺鍝勭焿缂嶁偓缂佺姵鐩獮姗€宕滄笟鍥ф暭闂傚倷鑳剁划顖炪€冮崱娑栤偓鍐醇閵夈儳鍔﹀銈嗗笂閼冲爼鎮¢婊呯<妞ゆ梻鏅幊鍐┿亜椤愩垻绠婚柟鐓庢贡閹叉挳宕熼銈呴叡闂傚倷绀侀幖顐ゆ偖椤愶箑纾块柛妤冨剱閸ゆ洟鏌℃径濠勬皑闁衡偓娴犲鐓熼柟閭﹀幗缁舵煡鎮樿箛鎾虫殻闁哄本鐩鎾Ω閵夈儳顔掗柣鐔哥矋婢瑰棝宕戦幘鑸靛床婵犻潧顑嗛崑銊╂⒒閸喎鍨侀柕蹇曞Υ閸︻厽鍏滃瀣捣琚﹂梻浣芥〃閻掞箓宕濋弽褜鍤楅柛鏇ㄥ€犻悢铏圭<婵☆垵宕佃ぐ鐔兼⒒閸屾艾鈧绮堟笟鈧獮澶愭晸閻樿尙顔囬梺绯曞墲缁嬫垵顪冩禒瀣厱闁规澘鍚€缁ㄨ崵绱掗妸锝呭姦婵﹤顭峰畷鎺戭潩椤戣棄浜剧€瑰嫭鍣磋ぐ鎺戠倞妞ゆ帒顦伴弲顏堟⒑閸濆嫮鈻夐柛妯恒偢瀹曞綊宕掗悙鑼啇濠电儑缍嗛崜娆愪繆閼测晝纾奸柍褜鍓熷畷姗€顢欓悾灞藉汲婵犵數濞€濞佳兾涘▎鎾嶅饪伴崼鐔哄幗闂佹寧娲栭崐鐑藉箟閻愵剚鍙忓┑鐘插亞閻撹偐鈧娲樼敮鎺楀煝鎼淬劌绠抽柟瀛樼箓閼垫劕鈹戦敍鍕杭闁稿﹥鍨垮畷纭呫亹閹烘挻娅囬梺闈涚墕椤︻垶鎮″┑鍫氬亾楠炲灝鍔氭い锔诲灦瀹曪繝骞庨懞銉у帾闂婎偄娲﹀ú鏍ф毄婵$偑鍊栭弻銊┧囬棃娑辨綎婵炲樊浜滅粻褰掓煟閹邦厼绲诲┑顔肩埣濮婃椽宕ㄦ繝鍐ㄩ瀺闂佽崵鍟块弲鐘荤嵁閸愵煈娼ㄩ柍褜鍓熼悰顔芥償閵婏箑娈熼梺闈涳紡閸愩劎顔囬梻鍌氬€风粈渚€骞夐敓鐘茬闁硅揪绠戠粈澶愬箹濞n剙鐏繛鍛█閺岋繝宕堕埡浣囥儳鐥幆褋鍋㈤柡灞界Х椤т線鏌涢幘璺烘瀻闁伙絽鍢查~婊堝焵椤掑嫬鏄ラ柣鎰綑缁剁偤鏌涘┑鍕姢婵炲娼″濠氬磼濮橈絿婀呴梺绋款儏鐎氼剛鍙呴梺闈涚墕閹儻銇愰幒鎾斥偓濠氭煕閹惧磭浠㈡繛宸弮瀵偊宕橀鑲╁姦濡炪倖甯掔€氼厾绮婚幒鎾剁瘈闁汇垽娼у瓭闂佹寧娲忛崐婵嬪箖瑜戠粻娑樷槈濞嗗繋鎮f繝鐢靛仜濡﹥绂嶅┑瀣亗婵炴垯鍨洪崐鍫曟煟閹伴偊鏉洪柛銈嗙懃閳规垿鍨鹃悙钘変划闂佸搫鑻粔鍫曞箟閹绢喖绀嬫い鎰╁€撶槐婵嬫煟鎼淬値娼愭繛鍙夌墪閻g兘顢楅崟顐ゅ幒闁瑰吋鐣崐妤呮偪閳ь剟姊虹憴鍕姢妞ゆ洦鍘煎嵄婵°倕鍟扮壕浠嬫煕鐏炴崘澹橀柍褜鍓氶幃鍌氱暦閹扮増鍊婚柤鎭掑劗閹稿啴鎮楅獮鍨姎妞わ富鍨崇划鍫熷緞閹邦剛顔愰柡澶婄墕婢т粙宕氭导瀛樼厱闁靛⿵濡囩粻鏍煏閸パ冾伃鐎殿喕绮欓、鏇綖椤撶姵宕熸繝纰樺墲椤ㄥ懘骞婂Ο渚綎婵炲樊浜滃婵嗏攽閻樻彃鏆欐い锔规櫊濮婃椽骞栭悙鎻掝瀴婵犮垻鎳撳Λ娑㈠礆閹烘挾绡€婵﹩鍓涢鍛存⒑閸忛棿鑸柛搴ㄤ憾閸┾偓妞ゆ帒鍊归弳顒勬煛鐏炶濡奸柍瑙勫灴瀹曞崬鈻庤箛鎾寸槗缂傚倸鍊烽梽宥夊礉韫囨拹娑㈠礋椤栨稓鐣抽梻鍌欒兌缁垱鐏欓悗瑙勬礈閺佸骞冩ィ鍐╁€绘俊顖濐嚙瀵寧绻濋悽闈浶㈤柛鐕佸灦婵¢潧鈹戦崶锔剧畾濡炪倖鍔戦崹褰掑汲濞嗘挻鐓冮柦妯侯樈濡叉悂鏌嶇拠鏌ュ弰妤犵偛娲、姗€鎮欓埡浣峰闂佺粯鍨兼慨銈夊煕閹达附鍋i柛銉e妼缁茬粯銇勯幒瀣伈闁哄矉缍侀、妯款槻婵炲懎绉堕埀顒冾潐濞测晝鎹㈠┑瀣祦閹兼番鍔嶉崵宥夋煏婢跺牆鍔欑紒顔ㄥ嫪绻嗛柣鎰典簻閳ь剚鐗曠叅鐎广儱顦壕濠氭煙閹呬邯闁稿鎸鹃幉鎾礋椤掑偆妲梻浣虹帛閻楁洟濡堕幖浣肝ュù锝堝€介弮鈧幏鍛村传閵壯呭祦闂備浇顕ч崙鐣岀礊閸℃稑纾婚柛娑樼摠閸嬬喐銇勯幇銊﹀櫚闁衡偓娴犲鐓熸俊顖濐嚙婢ь垶鏌涢悢椋庣闁哄本鐩弫鎰償閿涘嫪鍖栭柣搴$仛濠㈡﹢鏁冮鍕殾婵犲﹤妫Σ鐑芥⒑缁嬫鍎愰柟绋垮⒔閸掓帡顢橀悙鈺傤潔濠碘槅鍨崇划顖炲箖濞嗘垹纾藉ù锝呮惈鏍¢梺缁樻惈缁绘繂顕g拠娴嬫闁靛繒濮堥妸锔轰簻闁哄啫鍊哥敮鑸点亜椤愮喐娅婃慨濠冩そ閹稿﹥寰勬繝鍐╊啀闂備礁鎽滄慨鐢告偋閻樺樊鍤曞┑鐘崇閺呮彃顭跨捄鐚存敾妞ゃ儲绻堝娲捶椤撯偓閸︻厸鍋撳☉鎺撴珚鐎规洑鍗抽獮鍥偋閸碍瀚奸梻浣哄帶椤洟宕愰弴銏犲嚑閹艰揪绲跨壕鐣屸偓骞垮劚閹锋垿鐓鍌楀亾濞堝灝鏋︽い鏇嗗洤鐓″鑸靛姇閻撴垿鏌嶇憴鍕姢濞存粓绠栭弻銊╁即閻愭祴鍋撻崫銉т笉闁挎繂妫涚弧鈧梻鍌氱墛缁嬫帒顔忓┑鍠㈢懓饪版惔婵堝嚬婵烇絽娲ら敃顏堝箖濞嗘搩鏁傞柛鏇樺妼娴滈箖鏌曢崼婵愭Ц缂佲偓閸喓绠鹃柛鈩兩戠亸浼存煕鐎n亶鍎旈柡灞剧洴閸╁嫰宕橀浣圭亖闂備線鈧偛鑻晶顖涗繆椤愩垹鏆欓柣锝呭槻椤粓鍩€椤掑嫨鈧礁鈻庨幘鍐茬哎婵犮垼顕栭崹鏉棵洪妶鍥╀笉闁革富鍘剧壕鍏笺亜閺冨倸甯堕悽顖樺姂閺屾稓鈧綆鍋呭畷宀勬煙瀹曞洤鈻堟い銏☆殜閸┾偓妞ゆ帒瀚崥瑙勩亜閹烘垵鈧崵澹曟禒瀣厱閻忕偞宕樻竟姗€鏌嶈閸撶喖藟閹炬枼鏋庨柕蹇嬪€栭弲鎼佹煟濡灝鐨洪柣娑栧劚閳规垶骞婇柛濠冩礋楠炲﹥鎯旈敐鍥︾瑝婵炲鍘ч悺銊╂偂濞嗘挻鈷掗柛灞惧嚬閸ょ喖鏌涢弬璺ㄐч柡灞剧〒閳ь剨鎬ラ崟顒傚綃闂備礁鎼惌澶岀礊娓氣偓閻涱喚鈧綆鍠楅弲鏌ユ煕閳锯偓閺呮粓藟婢跺瞼纾藉ù锝夌細濡炬悂鏌涘Ο缁樺€愮€规洘鍨块獮妯肩磼濡攱瀚藉┑鐐舵彧缂嶁偓婵炲拑绲块弫顔尖槈閵忥紕鍘遍梺鍝勫暊閸嬫挻绻涢崣澶岀煂闁告帗甯″顕€宕奸悤浣诡棃婵犵數鍋熼ˉ鎰枍閺囥垺鍎庢い鏍ㄦ皑閺嗭附鎱ㄥ璇蹭壕濡炪們鍨洪悷鈺佺暦濡ゅ懎绀傚鎯邦潐瀹€绋款潖缂佹ḿ鐟归柍褜鍓熼崺鈧い鎺戝€告禒婊堟煠濞茶鐏¢柡鍛埣椤㈡盯鎮欑€电ǹ甯鹃梻浣规偠閸庢粓宕橀崣銉х>濠德板€楁慨鐑藉磻閻愬灚鏆滈柨鐔哄Х瀹撲線鎮楅敐搴濈按闁衡偓娴犲鐓欓梺顓ㄧ細缁ㄧ晫鐥幆褜鐓兼慨濠呮閹风娀宕f径濠冩暘婵$偑鍊ら崑鍕囬悽鍝ュ祦闁归偊鍙庡Σ褰掑箹鏉堝墽鎮奸柣鎺戝悑缁绘盯骞橀弶鎴犲姲闂佺ǹ顑嗛幑鍥蓟濞戙垹鐓涢柛鎰╁妺濡叉劕螖閻橀潧浠滄い鎴濐樀瀵偊宕掗悙鏉戠檮婵犮垼娉涢ˇ浼存儓韫囨稒鈷掗柛灞剧懅椤︼附绻濋埀顒佹綇閳轰礁鐏婂銈嗙墬缁秹寮冲⿰鍫熺厓闁告繂瀚埀顒佹倐椤㈡岸鏌嗗鍡欏帗閻熸粍绮撳畷婊冣槈濮橆収娼熼梺瑙勫劤閻°劍鍒婇幘顔界厽闁绘柨鎲$欢鎻掆攽椤斿搫鐏查柟顔煎槻楗即宕熼顐n棆闂備胶枪椤戝洭宕伴弽褏鏆︽慨妯挎硾缁犳娊鏌熺€涙ɑ鈷愰柣搴☆煼濮婅櫣鎲撮崟顐㈠Б闂佹眹鍊曞ú顓㈢嵁濡ゅ懎鍗抽柣鎰ㄦ櫆閺傗偓闂備胶绮崝鏍п缚濞嗘挻鍊堕柨鏇炲€归悡鐔搞亜閹炬鍟悘鍫ユ⒑鐎圭媭鍞虹紒顔界懇閵嗕線寮崼婵嬪敹闂佺粯鏌ㄩ幖顐︾嵁瀹ュ鈷戦柤濮愬€曢弸鎴︽煟閻旀潙鍔ら柍褜鍓氶崙褰掑礈濮樿泛绠為柕濞炬櫅閻愬﹪鏌曟繝蹇曞缂併劌顭峰娲濞戣鲸顎嗘繝纰樷偓铏窛缂侇喖顭烽幃娆戔偓娑櫭鎸庣節閻㈤潧孝闁哥噥鍨舵俊闈涒攽鐎n偆鍘搁柣蹇曞仩婵倝宕甸崶顒佺厵妞ゆ梻鏅幊鍥煙瀹曞洤啸闁圭懓瀚粭鐔碱敍濞嗘垹锛炴繝鐢靛Х閺佸憡鎱ㄩ銏犵闁告劦鍠栫壕鍏兼叏濮楀棗澧伴柕鍫櫍濮婄粯鎷呴崨濠冨創闂佹椿鍓欓妶绋跨暦娴兼潙鍐€妞ゆ挾鍋熼鎰版偡濠婂懎顣奸悽顖楁櫊瀵偊宕橀鐣屽弳濠电娀娼уΛ娆撳闯娴犲鐓ユ繛鎴炵懄瀹曞本鎱ㄦ繝鍕笡闁瑰嘲鎳橀幃鐑芥焽閿曗偓濞堟繄绱撻崒娆愮グ妞ゆ泦鍛亾濮橆厽绶查柣锝囧厴楠炲鈹戦崘鈺婃綌闂備線娼х换鎺撴叏閻戣棄鍌ㄩ柟缁㈠枟閳锋垿鏌i悢鐓庝喊闁搞倗鍠庨埞鎴︻敋閸涱厼绫嶉悗瑙勬礃閸ㄥ潡鐛Ο鑲╃<婵☆垳绮悵鎶芥⒑閸︻厼甯堕柣掳鍔戦弫瀣箾鐎涙ḿ鐭岄柛瀣崌婵$敻宕熼姘鳖啋闁诲海鏁哥涵鑸垫叏閸パ€鏀介柣鎰级閸e綊鏌ㄩ弴銊ら偗鐎殿喖顭烽弫宥夊礋椤忓懎濯伴梻浣风串缁蹭粙鎯堝Δ鍛櫜闁糕剝鐟ч鏇犵磼閻愵剚绶茬憸鏉款樀閺屽洭顢涘☉杈啍闂佺粯鍔樼亸娆戠不閸愯褰掓偑閸涱垳鏆ら梺鍦归敃銉ヮ嚗閸曨剛绡€闁告侗鍘肩紓姘舵⒒閸屾艾鈧悂宕愰幖浣哥9闁绘垼濮ら崐鍧楁煥閺囩偛鈧綊宕曢幋鐘冲枑闁绘鐗嗙粭鎺旂棯閹呯Ш闁哄矉绻濆畷鍫曞Ψ閵壯傛偅缂傚倷鑳舵慨閿嬬箾閳ь剟鏌″畝鈧崰鏍蓟閸ヮ剚鏅濋柍褜鍓熷鎼佹偄閹肩偘绨诲銈嗗姧缁插墽绮堢€n喗鐓涚€光偓閳ь剟宕伴弽顓犲祦闁糕剝鍑瑰Σ楣冩⒑閸︻厽娅曞┑顔芥尦閸╃偤骞嬮敂缁樻櫖濠电偞鍨堕悷銉╁船婢舵劖鈷戦柛婵嗗濠€浼存煟閳哄﹤鐏﹂柣娑卞枛椤粓鍩€椤掆偓椤曪綁宕奸弴鐐殿吅闂佺粯岣块崑锝夊磻閿熺姵鈷掗柛灞剧懅椤︼箓鏌熺拠褏绡€妤犵偞鍔楃划娆戞崉閵婏附顔曟俊鐐€栫敮鎺斺偓姘€鍥х劦妞ゆ帊鐒﹂ˉ鍫⑩偓瑙勬礃閿曘垽銆佸▎鎾冲簥濠㈣鍨板ú锕傛偂閺囥垺鐓冮柍杞扮閺嬨倖绻涢崼鐔嬵亪婀侀梺缁樓瑰▍鏇㈠磹閹邦厽鍙忓┑鐘插暞閵囨繈鏌熺粵鍦瘈濠碘€崇埣瀹曘劑顢欓悾灞拘橀梻鍌氬€风粈渚€骞栭锕€绠犻煫鍥ㄧ⊕閸庡孩銇勯弽顐粶缂佺姵鐗曡灃闁挎繂鎳庨弳鐐烘煕婵犲偆鐓奸柡宀嬬畱铻i柣姘嚟缁€鍡涙⒑闂堟丹娑㈠礋椤愶絿鈧儳鈹戦悩顔肩伇闁糕晜鐗犲畷婵嬪即閻樺樊妫滄繝鐢靛У绾板秹鎮″▎鎾寸厱闁圭偓顨呴幊搴g箔閿熺姵鈷戦柛婵嗗閸f椽鏌i幙鍕瘈闁绘侗鍣e浠嬵敃閵忕姷浜伴梻浣藉吹閸犳劕顭垮鈧崺娑欏緞閹邦厸鎷洪柣鐘叉穿鐏忔瑧绮婚幍顔剧<濠㈣泛鏈崵鈧銈庡亜缁绘﹢骞栬ぐ鎺戞嵍妞ゆ挾濯寸槐鍙夌節绾版ɑ顫婇柛銊ф暬椤㈡俺顦规俊顐㈠椤撳ジ宕ㄩ鍛澑闂備胶绮崝鏍亹閸愵亞妫憸鏃堝蓟閵娾晛鍗虫俊顖濇娴犵偓绻涢敐鍛悙闁挎洦浜獮鍐偩瀹€鈧惌娆撴偣娓氼垳鍘涙俊鑼额潐娣囧﹪鎮欓鍕ㄥ亾閺嶎厽鍋嬫俊銈傚亾妞ゎ偅绻堟俊鎼佸煛閸屾矮鐥梻渚€鈧偛鑻晶瀛樻叏婵犲偆鐓肩€规洘甯掗~婵嬵敄閽樺澹曢梺褰掓?閻掞箓宕戠€n亖鏀介柣妯诲絻椤忣偊鏌i鐔烘噰闁哄瞼鍠栭弻鍥晝閳ь剟寮搁敃鈧埞鎴︻敊閽樺鏋欓梺鍝勮閸婃洟婀侀柣搴秵閸嬪懘鎮甸弽顐ょ<闁绘劦鍓欑粈鍐╀繆椤愩垹顏繝鈧笟鈧娲箰鎼达絿鐣甸梺缁橆殔閿曨亣妫㈡繝銏e煐閸旀牠鎮¢悢鍏肩厵闁绘劦鍓氱紞鎴濃攽椤旇偐澧﹂柡宀€鍠愮粭鐔煎垂椤旂⒈鐎抽梺鍙ョ串缁茶法妲愰幒鏂哄亾閿濆簼绨藉ù鐘灪閵囧嫰顢楅埀顒勵敄閸涙潙鐓橀柟杈剧畱閻忔娊鏌涢幇顖氱毢濡ょ姴娲娲川婵犲啠鎷归梺鑽ゅ暱閺呯娀骞冩导鎼晩闁搞垹顦遍崰鏍х暦濡ゅ懏鍋傞幖杈剧到闁伴亶姊婚崒娆愮グ闁稿鍔欓崺娑㈠醇閵夈儳顦梺鎸庢磵閸嬫捇宕¢崡鐏诲綊鎮℃惔锝嗘喖闂佹娊鏀辩敮鎺楁箒闂佹寧绻傚В銉ㄣ亹閹烘垶杈堥梻渚囧墮缁夌敻鎮″▎鎴犳/闁哄鐏濋懜鐟懊瑰⿰鍕棆闁逞屽墲椤煤濮椻偓瀹曟繈寮介锝呭簥濠电娀娼ч弻濠囧箳閺冨倻鐓撻梺鍦规鎼佸几閻樼粯鍊垫繛鍫濈仢閺嬶箓鏌涢埡鍌滃⒌妤犵偛妫濆顕€宕煎┑鍫晪闂佽瀛╃粙鎺曟懌濠电姰鍨洪崹鐢稿煘閹达附鏅柛鏇ㄥ亗閺夘參姊虹粙鍖℃敾闁绘娲熼敐鐐剁疀閺冨倻鐦堝┑顔斤供閸庣敻濡烽埡鍌氣偓鐢告煥濠靛棛鍑归柟鏌ョ畺閺屾盯鎮㈤柨瀣畻闂佸搫鏈ú妯侯嚗閸曨偀妲堟繝濠傛媼濡茬懓鈹戦悙鑼憼缂侇喖绉堕崚鎺戭吋婢跺á锕傛煕閺囥劌鐏犵紒鐘差煼閹銈﹂幐搴涒偓鍐磼椤旀寧纭鹃柍瑙勫灴閸╁嫰宕橀妸褏銈锋俊鐐€ら崢楣冨礂濡警鍤曞┑鐘崇閺呮彃顭跨捄渚剱婵炲懏绮撳娲箹閻愭彃濡ч梺鍛婂姂閸斿酣顢橀崫鍕ㄦ斀閹烘娊宕愬Δ浣瑰弿闁绘垼妫勭壕濠氭煟閹邦剛浠涢柡鍡樼矒閺屻劑鎮㈤崫鍕戙儳鈧鎸风欢姘跺箖濡ゅ懏鏅查幖绮瑰墲閻忓牏绱撴笟鍥т簻缂佸缍婂璇差吋閸偅顎囬梻浣告啞閹搁箖宕伴弽顓犲祦闁告劑鍓弮鈧幏鍛存惞閸︻厽顫屽┑鐘愁問閸犳鏁冮埡鍛偍闁归棿绀佺粻顖涚箾瀹割喕绨奸柣鎾跺枛閺岋綁寮幐搴㈠枑闂佺懓鍟块崯鎾箖濡も偓椤繈鎮℃惔锛勭潉闁诲氦顫夊ú妯好洪弽顒備簷闂備礁鎲℃笟妤呭窗濮樿泛鍌ㄩ柛妤冨亹閺€浠嬫煃閽樺顥滈柣蹇嬪劦閺屾洟宕辫箛鎾插闂傚倷鑳舵灙妞ゆ垵妫濋獮鎴﹀炊椤掆偓缁犳牠鏌曡箛瀣偓鏇犵不閻㈠憡鐓欓柣鎴灻悘鈺呮⒒閸愶絽浜惧┑鐘垫暩婵兘寮崨濠冨弿闁绘垼妫勯弸渚€鏌涘☉姗堟敾闁告瑥绻橀弻锝夊箣閿濆棭妫勯梺鍝勵儎缁舵岸寮诲☉妯锋婵鐗婇弫楣冩⒑閸涘﹦鎳冪紒缁橈耿瀵鏁愭径濠勵吅闂佹寧绻傚Λ顓炍涢崟顖涒拺闁告繂瀚烽崕搴g磼閼搁潧鍝虹€殿喛顕ч埥澶娢熼柨瀣垫綌婵犳鍠楅〃鍛存偋婵犲洤鏋佸Δ锝呭暞閳锋垿鏌涘☉姗堝姛闁瑰啿鍟扮槐鎺旂磼濡櫣浼屾繝纰夌磿閺佽鐣烽悢纰辨晬婵﹢纭搁崯瀣⒒娴e憡鍟炴い銊ョ墦瀹曟垿鎮㈤崫銉祫闂佸吋绁撮弲婵堝婵傚憡鐓熼柟浼存涧婢ь噣鏌涢弬璇测偓鏍Φ閸曨垼鏁囬柣妯诲絻楠炲鎮楀▓鍨灈妞ゎ厾鍏橀獮鍐閵堝棗浜楅柟鑹版彧缂嶅棗危閸洘鐓熼柣鏂挎憸閻﹦绱掔紒妯烘诞鐎殿噮鍋婇、娆戜焊閺嶎煈娼旈梻渚€娼ф蹇曟閺囥垹鍌ㄩ柟鍓х帛閳锋帒霉閿濆懏鎲稿ù鐘灪閵囧嫰骞嬪┑鍥ф畻闂佽鍠楅敃銏ゅ极閸愵喖纾兼繛鎴炶壘鐢箖姊绘担瑙勫仩闁稿孩绮撳畷姗€宕i妷褏锛炴繝寰锋澘鈧鎱ㄩ悜钘夌;闁绘劕鐏氶弳婊堟煃閵夈儳锛嶉柡鍡畵閺屾稑螖閸愩劌澹夊┑鐐存尭椤兘寮婚悢纰辨晬闁糕剝顨嗗﹢鐗堛亜閵夘垳纾跨紒杈ㄦ崌瀹曟帒顫濋钘変壕闁归棿绀佺壕褰掓煙闂傚顦︾痪鍓ф嚀椤啰鈧綆浜濋幑锝夋煟椤撶偞顥滈柕鍡樺笒椤繈鏁愰崨顒€顥氶梻浣藉Г钃辩紒璇茬墕椤繐煤椤忓秵鏅㈤梺閫炲苯澧扮紒顔芥楠炴﹢顢欓悡搴℃濠电偠鎻徊璺ㄦ兜閸洖缁╁ù鐘差儐閻撶喐淇婇娑橆嚋闁绘繍浜弻锝夊Ω閿曗偓閻忊晠鏌嶈閸撴繈锝炴径鎰濡炲瀛╅鑺ユ叏濡寧纭鹃柦鍐枑缁绘盯骞嬪▎蹇曚患闂佺粯甯楀浠嬪蓟濞戙垹绠涢柛蹇撴憸閹稿绻濆▓鍨灈婵炲樊鍘奸~蹇涙惞閸︻厾鐓撻梺鍛婄墤閳ь剙鍟块~鐘绘⒒娴e懙鍦崲閹达附鏅濋柕蹇曞閸ゆ洟鎮归崶銊с偞婵℃彃鐗婃穱濠囶敍閻愬瓨鏆犻梺鍝勫€甸崑鎾绘⒒閸屾瑨鍏岀痪顓炵埣瀹曟粌鈹戠€c劉鍋撻崘顓犵杸闁哄倹顑欓崵銈夋⒑闁偛鑻晶顖毲庨崶褝韬柟顔界懇椤㈡棃宕熼妸銉ゅ闂佸搫璇炵仦鍓х▉闁荤喐绮庢晶妤冩暜閹烘梻鐭嗗鑸靛姈閻撴盯鏌涢妷锝呭姎闁诲繆鏅犻弻锝夊箻鏉堟崘鈧潡鏌″畝鈧崰鎰缚韫囨柣鍋呴柛鎰ㄦ櫓閳ь剙绉瑰铏圭矙閸栤€充紣濡炪値鍘鹃崗妯侯嚕鐠囨祴妲堥柕蹇曞閵娾晜鐓忛煫鍥э工婢ф煡鏌e┑鍥╁⒌闁哄备鈧剚鍚嬮煫鍥ㄦ礈閻﹀牆鈹戦纭峰姛缂侇噮鍨堕獮蹇涘川閺夋垵绐涙繝鐢靛Т閸婄懓鈻撳鈧缁樻媴閸涘﹨纭€闁哄浜濋妵鍕敇閻樻彃骞嬪Δ鐘靛仜閸熸挳骞冨⿰鍫熷殟闁靛闄勯悵鏇㈡⒒娴i涓茬紒鑼跺Г瀵板嫰宕堕鈧紒鈺呮煣韫囷絽浜炵紒鈾€鍋撻梻浣圭湽閸ㄨ棄岣胯閻☆厽绻濋悽闈涗哗妞ゆ洘绮庣划濠氬箻瀹曞洦娈鹃梺姹囧灮鏋紒鈧崘鈹夸簻闁哄啫鍊瑰▍鏇㈡煕濡粯宕屾慨濠冩そ瀹曘劍绻濋崟顓犳殼闂佽瀛╅崙褰掑礈閻斿鍤曢柟鎯板Г閸嬪嫰鏌涜箛姘汗闁告瑥妫楅埞鎴︽倷閺夋垹浠搁梺鑽ゅ暀閸ャ劌鍓归梺鍦劋閹稿宕h箛鎾斀闁绘ê寮跺婵堢磼閸欐ê宓嗛柡灞炬礋瀹曞爼濡搁妷銉綒婵°倗濮烽崑鐐垫暜閿熺姷宓侀悗锝庝簴閸亪鏌涢幇銊︽珖闁逞屽墯婵炲﹤顫忔繝姘<婵炲棙鍩堝Σ顕€姊虹涵鍜佸殝缂佺粯绻堥獮鍐倻閽樺)銊╂煥閺冨倻甯涙い鏃€妫冨楦裤亹閹烘搫绱电紓浣插亾濞撴埃鍋撻柟顔光偓鏂ユ斀閻庯綆鍋嗛崢鐢告⒑缂佹ê濮﹂柛鎾村哺閹﹢鏌嗗鍡欏幈濡炪倖鍔﹂崑鍌炴焽椤栫偞鐓涢悘鐐插⒔濞插瓨銇勯姀鈩冪濠碘€崇埣瀹曘劑顢欓崣銉ф寜闂傚倸鍊风粈渚€骞夐檱閹筋偊姊虹拠鈥虫灈闁稿﹤鐏濋锝嗙節濮橆厽娅滈梺鍓插亖閸ㄥ寮堕幖浣光拺闁告繂瀚婵嬫煕鐎n偓鑰挎鐐差儐椤︾増鎯旈敐鍥风床缂傚倸鍊烽梽宥夊垂瑜版帞宓侀柡宥庡幗閻撶喖鏌″搴′簻閻㈩垰鐖奸弻锝夋晲閸パ冨箣濡ょ姷鍋涢澶愬极閸愵喖鐒垫い鎺戝€绘稉宥呪攽閻樺磭顣查柛瀣剁秮閺屾盯濡烽鑽ょ泿闂佹眹鍔嶅浠嬪蓟閿濆围闁稿本鐭竟鏇熺節閻㈤潧啸闁轰焦鎮傚畷鎴︽偐鐠囪尙顔屽銈呯箰濡娆㈤妶鍚ゅ綊鎮╁顔煎壈缂備胶濮烽崰鏍蓟閵娾晜鍋勯柛婵嗗珔閵忋垻妫柟瑙勫姦濞兼劙鏌曢崶褍顏€殿喕绮欓、鏇綖椤撶喎濯伴梻鍌欑劍婵炲﹪寮ㄩ柆宥呭瀭鐟滅増甯楅崕澶嬨亜韫囨挾澧遍柡浣告喘閺岋綁骞囬鐔虹▏濠电偛鎷戠徊鍓ф崲濞戞埃鍋撳☉娆嬬細闁活厼锕︾槐鎾愁吋閸滃啳鍚Δ鐘靛仜閸熶即骞戦崟顓熷仒闁斥晛鍠氬ḿ鏃堟⒒娴e憡鎯堥悹鍥╁仱瀹曟﹢濡搁幇顓熺婵﹦绮幏鍛存惞楠炲簱鍋撴繝鍥ㄧ厸闁稿本鐟х粣鏃傗偓瑙勬礃閸ㄥ潡鐛鈧獮鍥ㄦ媴閻熸壆妲i梻鍌欑窔濞佳囨偋閸℃あ娑樜旈崘顏嗙暥闂佸湱鍎ら〃鍡涙偂閺囥垺鐓熼柡鍥ㄦ皑椤︼箑霉濠娾偓閸楁娊寮婚悢纰辨晬婵﹩鍓氬▓顓㈡煟閹惧崬鈧牠濡甸崟顔剧杸闁圭偓娼欏▍褔姊洪崨濞掝亪骞夐敍鍕床婵炴垶鐟︾紞鍥煕閹炬鍟悡鍌涚節閻㈤潧袥闁稿鎹囧鍫曞醇濞戞ê顬夊┑鐐叉噽婵敻濡甸崟顔剧杸闁规崘娉涢·鈧梻浣虹帛閹告悂宕幘顔肩畺鐎瑰嫭澹嬮弸搴ㄧ叓閸ャ劍鎯勫ù鐘层偢濮婅櫣鎷犻懠顒傤唹闂佺懓鎲℃繛濠傤嚕婵犳碍鍋勭痪鎷岄哺閺呪晠姊烘导娆戝埌闁哄牜鍓熷畷铏鐎涙ê鈧灚绻涢崼婵堜虎闁哄鐩弻锝夊冀瑜嬮崑銏ゆ煟濞戝崬鏋ら柍褜鍓ㄧ紞鍡涘窗濡ゅ懎纾婚柟鐗堟緲缁狙囨煕椤愵偄浜為柛妯荤洴閺屸剝鎷呴崨濠傛灎濠殿喖锕ら…宄扮暦閹烘埈娼╂い鎴f娴滄儳顪冪€n亝鎹i柣顓炴闇夐柨婵嗩槹娴溿倝鏌ら弶鎸庡仴鐎殿喖鐖煎畷鐓庘槈濡警鐎峰┑鐐差嚟婵潧鐣濈粙娆炬綎缂備焦蓱婵潙銆掑鐓庣仭闁轰緡鍨辩换婵嗏枔閸喗鐏侀梺绋匡攻椤ㄥ﹤鐣峰璺虹闁圭偓娼欓崝鍛存⒑闂堟胆褰掑磿閹跺壙鍥敃閿旇В鎷洪梺闈╁瘜閸樺ジ宕濈€n偁浜滈柕濞垮劜閸d粙鏌e顓炲姢妞ゆ挸鍚嬪鍕偓锝庡墮楠炲牊淇婇悙顏勨偓鏍礉閹达箑纾归柡鍥ュ灩閸戠娀骞栫划鐟扮厬鐟滅増甯楅崑鎰版煟閹寸儑渚涘ù鐘櫇缁辨挻鎷呮禒瀣懙闂佸湱枪椤兘鐛箛娑樺窛闁哄鍨归ˇ顓㈡⒑閸︻厾甯涢悽顖涘笚缁旂喎顓奸崱鏇犵畾闂佺粯鍔︽禍婊堝焵椤掍胶澧悡銈嗕繆椤栨繂鍚圭紒鐘冲劤閳规垿鎮╅崣澶嬫倷闂佸搫顑勭欢姘跺蓟濞戙垹绠涢梻鍫熺⊕閻忓牏绱掗悙顒€鍔ら柛姘儑閹广垹鈽夐姀鐘殿吅闂佺粯鍔樺▔娑⑺夊┑鍠棃鎮╅棃娑楃捕闂佺粯顨嗛幐鎼侊綖韫囨洜纾兼俊顖濐嚙椤庢捇姊洪崨濠勨槈闁挎洏鍎靛畷鏇㈠箻閺傘儲鏂€闂佺粯鍔樼亸娆忥耿閹绢喗鐓曢柕濞垮妽椤ュ鏌i敐鍛Щ闁宠鍨垮畷鍗炩枎閹邦厾鏆﹂梻鍌欑閹测€趁洪敃鍌氱婵炲棙鎸搁悞鍨亜閹哄棗浜鹃梺缁樼墪閵堢ǹ顕f繝姘櫜闁告稑鍊婚崰鏍箠閺嶎厼鐓涘ù锝勮閸嬔囨⒒閸屾瑨鍏岀紒顕呭灦楠炴劗鎷犵憗浣规そ閹垽鎮℃惔銈嗘啺闂備胶绮弻銊╁触鐎n喖鍚归悗锝庡亖娴滄粓鏌熼崫鍕棞濞存粎鍋撶换婵堝枈婢跺瞼锛熼梺鍛婎焼閸ャ劎鐣冲┑鐘垫暩婵挳鏁冮妶鍥e亾濮樼厧澧寸€规洘绻堟俊鑸靛緞鐎n剙甯楅梺鑽ゅ枑閻熴儳鈧凹鍓熼幃姗€骞橀鐣屽幐婵炶揪绲介幗婊勬櫏闁诲氦顫夊ú婊堝窗閺嶎厹鈧線寮撮姀鐘靛姶闂佸憡鍔忛弲婵堢玻閺冨牊鈷掗柛灞捐壘閳ь剛鍏橀幊妤呮嚋閻㈠吀绮撮梻鍌欑劍鐎笛兠鸿箛娑樼?闁汇垻枪缁犳牜鎲搁弮鍫濈畺闁冲搫鎳忛崵鎴炪亜閹哄秶鍔嶆い鏃€娲樼换婵嬫偨闂堟稈鏋呭┑鐐板尃閸ヨ埖鏅為梺绯曞墲缁嬫垿鎮块悙顒傜瘈闂傚牊渚楅崕鎰版煟閹惧啿鏆熼柟鑼归オ浼村醇濠靛牜妲堕梻浣虹帛濮婂宕㈣閹﹢骞庨懞銉у弳闂佸搫娲ㄩ崑娑㈠焵椤掍焦鍊愰柡灞诲姂婵″爼宕遍弴鐘电暰闂備線娼ч悧鍡涘磹閸涘﹦顩插Δ锝呭暞閳锋垹绱撴担濮戭亞绮幒妤佺厽闊洦鏌ㄩ崫鍝勨攽閿涘嫭鏆€规洜鍠栭、娑橆潩妲屾牕鏁介梺璇查缁犲秹宕曢柆宥嗗亱闁糕剝绋戦崒銊╂煥濞戞ê顏痪鎹愭闇夐柨婵嗘噺閹牏鈧稒绻冪换婵嬪煕閳ь剟宕掑⿰鍛幆闂備胶纭堕弬渚€宕戦幘鎰佹富闁靛牆妫楅崸濠囨煕鐎n偅宕岄柡灞剧☉铻i柤濮愬€楅悡澶愭倵鐟欏嫭绀冮柛銊ユ健閻涱喖顫滈埀顒€顕i鍕ㄩ柨鏃囧Г濠㈡垿姊婚崒娆掑厡缂侇噮鍨遍悘娆愮箾鐎涙ḿ鐭ら柛鎾寸〒閸掓帡鏁愭径濠勭潉闂佸壊鍋嗛崰鎾诲储闁秵鐓熼幖鎼灣缁夌敻鏌涚€n偄绗掗柍缁樻崌瀵噣宕奸悢鍝勫笚闂佽崵鍠愰悷銉р偓姘煎墴閹ḿ鈧稒菧娴滄粓鏌曡箛銉х?闁瑰啿鎳忕换娑㈠箣閻樿櫕姣堥梺璇″枟缁捇骞冮崜褌娌柦妯侯槸閸炪劌鈹戦悩鍨毄濠殿喚鍏樺顐﹀箹娴e摜锛涘┑鐐村灟閸ㄥ湱绮婚鐐寸厵閻庣數枪瀛濈紓浣界堪閸婃繈寮诲☉鈶┾偓锕傚箣濠靛洦鐤囬梻浣瑰缁诲倿藝椤栨粎涓嶆繛鎴欏灪閻撴稑顭跨捄鍝勵劉缁绢叀鍩栭妵鍕棘閸柭ゅ惈濠殿喖锕ュ浠嬪箖閻戣棄绾ч柟绋垮閻︼絿绱撴担绋库挃闁惧繐閰e畷锝夊礃閵娧勬婵炴潙鍚嬪ḿ娆戠不婵犳碍鍋i柛銉簻閻ㄧ儤銇勯弬鎸庮棦婵﹨娅g槐鎺懳熼崜浣虹獥缂傚倷绶¢崳顕€宕圭捄铏规殾闁汇垻枪缁狅綁鏌ㄩ弮鍌涙珪闁告ê澧界槐鎾存媴閸撴彃鍓靛┑鐐差槹濞叉ḿ绮嬮幒鎴旀婵炲棙鍔曞鍧楁⒑閹稿海绠撴俊顐n殕閹便劌顓奸崱妯哄伎婵犵數濮撮崑鍡涙偂閼测斁鍋撶憴鍕閻㈩垱甯¢敐鐐测攽鐎e灚鏅為梺鑺ッˇ顔界珶閺囥垺鈷戠紓浣姑悘鍗炩攽椤斿搫鈧繂鐣烽悽绋跨妞ゆ牗绋撻崢楣冩⒑閸涘﹦缂氶柛搴㈢叀瀵娊鍩℃导鍗炵秺閹晛鐣烽崶鑸垫缂傚倷鑳剁划顖滄崲閸儱绠栧ù鐘差儐椤ュ牊绻涢幋鐑嗘畼闁硅娲樻穱濠囨倷椤忓嫧鍋撻弽顬℃椽鏁冮崒姘辩厬闂佸憡鍔戦崝搴ㄥ汲閿旀垝绻嗛柕鍫濆€告禍楣冩煣娴兼瑧鍒伴柕鍡樺笒椤繈鎮℃惔锝勫摋婵犵數鍋涢悧鍕礉瀹€鍕ㄢ偓鏃堝礃椤斿槈褔鏌涢埄鍐炬當妞ゎ偄娲铏圭矙閸栤剝鏁鹃梺缁橆殕缁捇宕洪埀顒併亜閹哄秷鍏屾い锝呭级閹便劌螣缁嬪灝顫囬梺绯曟杹閸嬫挸顪冮妶鍡楃瑨闁稿﹤缍婂畷鐢稿焵椤掍胶绡€闁靛繈鍨洪崵鈧梺鎸庢处娴滄粓鎮鹃柨瀣嚤闁哄鍨甸崬銊╂偡濠婂喚妯€鐎殿喗鎮傚顕€宕奸悢鍝勫妇濠电姷鏁告慨瀵告崲閹拌埇鈧懘顢楅崒婊咃紲闂佹娊鏁崑鎾绘煕鐎n偅宕屾慨濠勭帛閹峰懘宕烽鐔诲即闂備焦鎮堕崝蹇撐涢崟顐ゅ箵闁兼剚鍨煎Σ濂告⒑缂佹﹩娈旀繛鎾棑濡叉劙骞樼€涙ê顎撻梺鍛婄箓鐎氼亝绔熼弴鐐╂斀闁绘﹩鍠栭悘顏勭暆閿濆牊纭堕柛鎺撳浮瀵噣宕奸悢铚傜敾闂傚倷绶¢崣蹇曠不閹存績鏋旈柕濞炬櫆閳锋垿鏌涘┑鍡楊伂妞ゎ偓绠撻弻娑欐償閵堝嫬鎯堢紓渚囧枛椤兘骞冩禒瀣窛濠电姴瀚獮宥夋⒒娴h櫣甯涢柛銊ㄦ硾閻滆崵鎹勯妸褌绗夊┑顔姐仜閸嬫捇鏌$仦鍓ф创闁诡喗鐟╁畷褰掝敃閿濆棛妲楅梻鍌欑閹碱偊鎯屾径宀€绀婂〒姘e亾妤犵偛鍟撮崺锟犲川椤斿皷鍋撶紒妯诲弿婵°倐鍋撴俊顐f瀹曨偄螖閸涱喒鎷洪柣鐘叉穿鐏忔瑧绮婚幍顔剧<閻犲洩灏欐晶锔锯偓瑙勬礃缁诲倿鎮惧┑瀣闁割煈鍋呭▍鎾绘⒒婵犲骸浜滄繛璇у缁瑩骞嬪┑鍥ㄦ闂備浇宕甸崰鎰垝瀹€鍕婂洭妫冨☉姘闂佺鎻粻鎴犵不婵犳碍鐓犻柟闂寸劍濞懷囨煛鐎n亜鈧灝顫忓ú顏勫窛濠电姴鍟ˇ鈺呮⒑閸涘﹥灏伴柣鐔濆洤绐楀┑鐘插亞閸氬鏌涘☉鍙樼凹闁哄倵鍋撻梻鍌欑閻ゅ洤螞閸曨倠娑樜旀担渚锤濠电娀娼ч悧蹇曞婵傚憡鍋i柛銉e妼缁插鏌嶈閸撴瑥岣块敓鐘叉瀬闁规壆澧楅崐鐑芥煕閹捐尪鍏岄柡澶屒归埞鎴︽倷閺夋垹浠搁梺鑽ゅ櫐缁犳挸鐣烽弴銏╂晜闁割偆鍟块幏娲⒒閸屾氨澧愰柡鍛洴閹礁饪伴崼鐔哄幈濠殿喗銇涢崑鎾剁磼閻樺磭澧电€殿噮鍋勯濂稿川椤忓嫮澧梻浣告啞閸斞呭緤妤e啫妫橀柍褜鍓熷缁樻媴閸濄儲鐎┑鈽嗗亜鐎氼剝鐏嬪┑掳鍊曢幊蹇涘磹閸洘鐓熸俊顖濆亹鐢盯鏌i幘瀵告噮闁汇儺浜鍫曞垂椤斿灝鐓樺┑鐐茬摠缁牓宕¢幎钘夎摕闁靛ǹ鍎弨浠嬫煕椤愶絿绠戠紒顔挎硾椤啴濡堕崱妯虹闂侀潧鐗忔灙闁伙絿鍏樺畷濂稿即閻愰潧骞愰梻浣告啞閸旀ê鈻旈弴銏♀拻妞ゆ牗绋撶弧鈧梺姹囧灲濞佳勭閳哄懏鐓欐繛鑼额唺缁ㄧ晫绱掓潏鈺佷沪缂佹鍠栭崺鈧い鎺戝暞閿涘倿姊绘担绛嬫綈鐎规洘锕㈤、姘愁槾缂侇喖鐗婂鍕沪缁嬪じ澹曞Δ鐘靛仜閻忔繈宕濆顓滀簻闁挎柨鐏濆畵鍡涙煙椤斿厜鍋撻弬銉︾€婚梺鐟邦嚟婵兘鏁嶅⿰鍫熺厽閹兼惌鍨崇粔闈浢瑰⿰鍛沪缂佸倹甯℃慨鈧柕鍫濇閸樻悂姊虹化鏇炲⒉缂佸鍔欓獮澶嬨偅閸愨晝鍘搁悗鍏夊亾閻庯綆鍓涜ⅵ闂備浇妗ㄩ悞锕傚礉濞嗗繒鏆﹂柟顖炲亰濡茶螖閻橀潧浠滄い鎴濇嚀閻忓啴姊虹紒姗堣€挎繛浣冲嫮顩锋繝濠傚娴滄粓鏌熺€涙ḿ绠ユ俊顖楀亾闁诲孩顔栭崳顕€宕戞繝鍌滄殾婵せ鍋撴い銏$懇閹虫牠鍩℃担鎰熸洖鈹戦敍鍕杭闁稿﹥鐗滈弫顕€骞掑Δ鈧壕鍦磽娴h疮缂氶柍缁樻⒒閳ь剙绠嶉崕閬嶅箠婢舵劕缁╁ù鐘差儐閻撶喐淇婇婵囶仩闁挎稑绉甸妵鍕晲閸℃瑥寮ㄩ梺鍝勬湰缁嬫捇鍩€椤掑﹦鍒板褍娴风划鏃堫敋閳ь剟寮婚敍鍕勃闁告挆鍕灡濠电姷顣槐鏇㈠礂濮椻偓閻涱喚鈧綆浜栭弨浠嬫煕閳╁叐鎴︻敊瀹ュ應鏀介幒鎶藉磹濡や焦鍙忛柡澶嬪殮濞差亶鏁囬柕蹇曞Х閻e搫鈹戞幊閸婃洟宕鐐茬獥闁糕剝绋掗悡鏇㈡煛閸ャ儱濡煎褜鍠氶惀顏堝级鐠恒剱銈囩磼鏉堛劍灏伴柟宄版嚇瀹曟粓宕f竟顓婂洦鈷戦柣鐔哄閸熺偛鈹戦悙璇ц含鐎规洝顫夐妶锝夊礃閵娧呮綁闂備礁澹婇崑鍛崲閸曨垁鍥Ω閵夘喗瀵岄梺闈涚墕濡瑩鎮¢妷锔跨箚闁圭粯甯炴晶锝嗐亜閿曗偓缂嶅﹪寮婚敍鍕勃闁告挆鍕灡闂備胶纭堕弲娑氣偓姘緲閻e嘲螖閸涱喖浜奸梺閫炲苯澧紒鍌氱Ч椤㈡棃宕熸惔銏㈡创鐎规洜鍠栭、鏇㈩敃閵忊€斥偓顖炴⒒娴h鍋犻柛搴櫍瀵彃鈹戠€n偅娅栧┑鐘绘涧濞层劎绮绘ィ鍐ㄧ骇闁割偅绻傞埛鏃堟煕閹烘挻绶叉い顓炴健閹鏁鍨儓闁诲氦顫夊ú妯好洪悢鑲╁祦闁搞儺鍓氶崑瀣煕椤愮姴鐏╂鐐茬墦濮婄粯绗熼埀顒€岣胯閻忔瑩姊虹粙鍧楀弰濞存粌鐖兼俊鎾磼濮樿鲸娈鹃梺鎼炲劗閺呮繈鏁嶅⿰鍐炬富闁靛牆妫欓埛鎺楁煃瀹勬壆澧︾€规洘娲濈粻娑㈠棘鐠佸磭鐩庨梻浣筋潐閸庢娊宕崸妤€绠栭柟瀵稿Л閸嬫捇宕归锝囧嚒闁诲孩鍑归崳锝夊春閳ь剚銇勯幒鎴姛缂佸娼ч湁婵犲﹤瀚晶鐢碘偓瑙勬礃閸ㄥ潡鐛Ο鑲╃<婵☆垳鍘у鎶芥⒑鐠囨彃鍤辩紒鎻掝煼瀹曟繄鈧綆鍓濇慨鍐测攽閻樺磭顣查柍閿嬪灴閺岋綁鎮㈤崫鍕垫毉闂佽鍨伴悧蹇曟閹烘挸绶炲┑鐘插閻撶喖鏌﹀Ο鑽ょ疄闁哄被鍔戝顕€宕奸悢鍛婎唶闂備胶枪椤戝棝骞愰幖浣哥厺闁规崘顕ч崹鍌涖亜閺冨倹娅曞ù婊庝邯濮婄粯鎷呯粵瀣缂備胶绮崹褰掑箲閵忋倕閱囬柕澶堝劜濡差剟姊虹紒妯哄闁圭⒈鍋嗙划濠氭晲婢跺鍙嗛梺鍝勬处椤ㄥ懏绂嶆ィ鍐┾拺缂備焦蓱閹牏绱掔紒妯肩疄鐎殿喛顕ч埥澶愬閻橀潧濮堕梻浣告啞閸旀宕戦幘缁樺仼闁稿繗鍋愮粻楣冩倵閻㈢櫥褰掝敁瀹€鍕厱闁靛ǹ鍔嶇涵鐐亜椤愩垻绠伴悡銈嗐亜韫囨挸顏╃紒鎰⊕缁绘繈鎮介棃娴躲垺绻涚€电ǹ鍘寸€规洘绻堝畷濂稿即閻斿弶瀚奸梻浣告啞缁嬫垿鏁冮妷锕€绶為柛鏇ㄥ灡閻撴洘绻涢崱妤冪妞ゅ孩顨婇幃锟犲Χ婢跺鍘卞┑鐐村灦閿曨偄顫忓Δ鍐<閻犲洤寮堕ˉ銏ゆ煛鐏炵偓绀嬬€规洜鍘ч埞鎴﹀醇閵忊晛鏁介梻鍌欑閹诧紕鏁繝鍥х闁规儼妫勯拑鐔哥箾閹存瑥鐏柛瀣闇夐柨婵嗘噺閹茬ǹ霉閻樿櫕鍊愰柟顔筋殘閹叉挳宕熼鍌ゆО闂備礁鎲″褰掓偡閵夆晜鍋╅柣銈庡灛娴滃綊鏌熼悜妯肩畺闁哄懏绻堝娲箰鎼达絿鐣甸梺鐟板暱鐎涒晝鈧潧鍚嬮幆鏃堝閵忋垻妲囩紓浣稿⒔婢ф鎽銈庡亜閿曨亪寮诲☉銏犖╅柨鏇楀亾闁崇粯娲滈埀顒冾潐濞插繘宕规總鏉嗗洤鐣烽崶鈺冿紲闂佺ǹ鏈銊︾墡闂備線娼ч悧鐐电礊娴e摜鏆︽慨妞诲亾闁糕斁鍓濋幏鍛村箵閹哄秴顥氶梻浣稿閻撳牓宕戦崨鏉戠煑闊洦鏌х换鍡樸亜閺嶃劎鐭婇悽顖濇硾闇夋繝濠傜墢閻f椽鏌熼绛嬫當妞ゎ偅绻堥幃娆擃敆閳ь剟顢旈敓锟�

简介
IBM WebSphere Application Server 是一种可靠的企业级应用服务器,它提供了一组核心组件、资源和服务,供开发人员在应用程序中使用。每个应用程序都具备特有的需求,并且经常采用截然不同的方式使用应用服务器的资源。为了提供高度灵活性并支持这种广泛的应用程序,WebSphere Application Server 提供了一组全面的参数来帮助您增强对应用程序的调优。
应用服务器已经为最常用的调优参数设置了默认值,以确保能为最广泛的应用程序提供开箱即用的性能改善。但是,由于任意两个应用程序都不可能采用完全相同的方式来使用应用服务器,因此无法确保一组调优参数能适用于所有应用程序。这也突显了对应用程序执行有重点的性能测试和调优的重要性。
本文将讨论在 WebSphere Application Server V7.0(和之前发行版)中最常使用的一些参数,以及对它们进行调优的方法。与其他相关文章提供的调优建议不同,本文将使用 Apache DayTrader Performance Benchmark Sample 案例研究作为本文的上下文。借助 DayTrader 应用程序,您可以清楚地确定所使用的主要服务器组件,对这些区域进行重点调优,并观察各种调优更改所带来的收益。
在继续阅读之前,需要记住关于应用服务器性能调优的一些事项:
提高性能经常会牺牲应用程序或应用服务器的一些特性或功能。在计算性能调优更改时应该仔细考虑性能和特性之间的权衡。
应用服务器之外的一些因素有时会影响性能,包括硬件和操作系统配置、系统中运行的进程、后端数据库资源的性能、网络延迟等等。您在自己执行性能评估时,必须将这些因素考虑在内。
此处讨论的性能改善仅针对 DayTrader 应用程序,并且特定于此处描述的工作负载组成及所支持的硬件和软件栈。您通过本文介绍的调优更改实现的应用程序性能提升肯定会有所不同,并且应该通过您自己的性能测试进行评估。
DayTrader 应用程序
Apache DayTrader Performance Benchmark Sample 应用程序模拟了一个简单的股票交易系统,它允许用户登录/注销、查看股票组合、查询股票报价、交易股票以及管理帐户信息。DayTrader 不仅是一个优秀的功能测试应用程序,还提供了一组标准的工作负载,用于描述和测量应用服务器和组件级性能。DayTrader(以及它所依托的由 IBM 开发的 Trade Performance Benchmark Sample 应用程序)的初衷并非提供最佳性能,而是对应用服务器发行版和备选实现样式、模式进行比较。
DayTrader 基于一组核心 Java™ Enterprise Edition (Java EE) 技术,包括用于表示层的 Java servlets 和 JavaServer™ Pages (JSPs)、Java 数据库连接 (JDBC)、Java Message Service (JMS)、Enterprise JavaBeans™ (EJBs) 以及用于后端业务逻辑和持久层的消息驱动 beans (MDBs)。图 1 提供了应用程序体系结构的高级视图。
图 1. DayTrader 应用程序视图
图片看不清楚?请点击这里查看原图(大图)。
为了便于您评估一些常见的 Java EE 持久性和事务管理模式,DayTrader 提供了三种不同的业务服务实现。这些实现(或运行时模式)如表 1 所示。
表 1. DayTrader 实现
运行时模式 | 模式 | 描述 |
Direct | Servlet 到 JDBC | 使用自定义 JDBC 代码直接对数据库执行创建、读取、更新和删除 (CRUD) 操作。数据库连接、提交和回滚将在代码中手动管理。 |
Session Direct | 从 Servlet 到 Stateless SessionBean 到 JDBC | 使用自定义 JDBC 代码直接对数据库执行 CRUD 操作。数据库连接将在代码中手动管理。数据库提交和回滚将由无状态会话 bean 自动管理。 |
EJB | 从 Servlet 到 StatelessSessionBean 到 EntityBean | EJB 容器承担所有查询、事务和数据库连接的责任。 |
本文将讨论这些运行时模式,以便演示各种调优更改对这三种常见 Java EE 持久性和事务实现风格的影响。
导航 WebSphere Application Server 可调参数
如前所述,在执行性能调优时,理解应用程序体系结构、服务器组件以及所使用的资源是非常重要的。具备这些知识之后,您可以迅速过滤可调参数并专注于直接影响应用程序的核心可调参数。
性能调优通常从 Java Virtual Machine (JVM) 开始,它是应用服务器的基础。依照之前的观点,调优主要是由应用程序所使用的应用服务器组件所驱动。举例来说,您可以使用体系结构图(图 1)来确定 DayTrader 应用程序的一些主要可调服务器组件:
Web 和 EJB 容器
相关线程池
数据库连接池
默认消息传递提供者
本文其余部分将根据上面列出的组件来详细讨论一些会对 DayTrader 性能造成影响的调优选项。这些选项可以分为以下类别:
基本调优:包括一些最常调节和使用的应用服务器组件,从 JVM 开始。这些设置通常占据最大份量。
高级调优:第二种高级调优参数通常与特定的场景相关,且常用于发掘系统的最大性能。
异步消息传递调优:此处讨论的选项特定于使用 WebSphere Application Server 的消息传递组件实现异步消息传递的应用程序。
我们将详细讨论这类调优参数的适用性,它们的功能权衡以及最终对性能造成的影响(如果可能,针对各种持久性和事务管理模式)。我们还将介绍可以在调优过程中为特定参数提供协助的一些工具。
基本调优
本节将讨论:
JVM 堆大小
线程工具大小
连接池大小
数据源状态缓存大小
通过引用传递的 ORB
a. JVM 堆大小
JVM 堆大小参数将直接影响垃圾收集行为。通过增加 JVM 堆大小,可以在出现分配故障并触发垃圾收集之前创建更多对象。这通常可以让应用程序增加各垃圾收集 (GC) 周期之间的间隔时间。遗憾的是,增加堆大小的一个缺点是查找和处理需要垃圾收集的对象所需的时间也会随之增加。因此,JVM 堆大小调优经常涉及确定垃圾收集之间的间隔时间与执行垃圾收集所需的暂停时间之间的平衡点。
要对 JVM 堆大小进行调优,需要启用详细模式的(verbose)GC。此操作可以在 WebSphere Application Server 管理控制台中完成:依次选择 Servers => Application servers => server_name => Process definition => Java Virtual Machine。通过启用详细模式的 GC,JVM 在每次垃圾收集时都会打印输出有用的信息,比如堆中的空闲和已使用字节、垃圾收集之间的间隔以及暂停时间。这些信息将记录在 native_stderr.log 文件中。随后,各种工具可以使用该文件来可视化堆使用情况。
WebSphere Application Server 的默认堆设置如下:初始堆大小为 50 MB,最大堆大小为 256 MB。通常情况下,应该将最小和最大堆大小设置为相同值,以防止 JVM 动态调整堆设置。通过将重要参数固定为常量,这不仅有助于简化 GC 分析,还可以避免与分配和取消分配更多内存相关的成本开销。将最大和最小堆大小设置为相同值的缺点在于,初次启动 JVM 时会比较慢,因为 JVM 必须分配更大的堆。
在一些场景中,将最大和最小堆大小设置为不同值是更有利的。其中一个场景就是运行不同工作负载的多个应用服务器实例托管在同一服务器上。在此场景中,JVM 可以动态响应不断变化的工作负载需求,并更加高效地使用系统内存。
测试
在启动详细模式 GC 的情况下,我们针对初始和最大堆大小分别设置为 256 MB、512 MB、1024 MB 和 2048 MB 执行了 4 次测试。您可以手动分析详细模式 GC,但可以通过一些图形工具,比如 IBM Monitoring and Diagnostic Tools for Java - Garbage Collection and Memory Visualizer 工具,可以显著简化此过程。该工具用于在实验测试中查看详细模式 GC 数据,以便在查找 DayTrader 应用程序的适当堆大小时可以做出一些调整。
在详细模式垃圾收集输出中监视的第一批项目包括收集后的空闲堆。该指标常用于确定应用程序中是否出现的任何 Java 内存泄漏。如果此指标未达到稳定状态值,并随时间持续减小,则明确表示应用程序中出现了内存泄漏。收集后的空闲堆指标还可以与堆大小结合,共同计算服务器和应用程序所使用的内存工作集(或 “内存占用”)。只需要从总堆大小中减去空闲堆值就可以得到这个值。
图 2. 收集后的空闲堆汇总
图片看不清楚?请点击这里查看原图(大图)。
需要注意,虽然详细模式 GC 数据和图 2 中的表可以帮助检测 Java 堆中的内存泄漏,但无法检测本机内存泄漏。发生本机内存泄漏的情况是本机组件(比如使用 C/C++ 编写并通过 Java Native Interface API 调用的供应商本机库)造成本机内存泄漏到 Java 堆外部。在这种情况下,需要使用平台相关工具(如 Linux® 平台上的 ps 和 top 命令、Windows® 平台上的 Perfmon 命令等)来监控 Java 进程的本机内存使用。WebSphere Application Server Support 分页 提供了关于诊断内存泄漏的详细文档。
另外还需要考虑各收集任务的垃圾收集间隔时间和平均暂停时间。GC 间隔时间是垃圾收集周期之间的间隔时间。暂停时间是垃圾收集周期完成所需的时间。图 3 展示了四种堆大小的垃圾收集间隔时间。它们最终的平均值是 0.6 秒 (256 MB)、1.5 秒 (512 MB)、3.2 秒 (1024 MB) 和 6.7 秒 (2048 MB)。
图 3. 垃圾收集间隔时间
图片看不清楚?请点击这里查看原图(大图)。
图 4 显示了四种堆大小的平均暂停时间。在实验测试中,它们最终的平均值分别是 62 ms (256 MB)、69 ms (512 MB)、83 ms (1024 MB) 和 117 ms (2048 MB)。这明确展示了增加 Java 堆大小的标准权衡。当堆大小增加时,GC 之间的间隔将增加,这样便可以在 JVM 暂停以执行垃圾收集例程之前完成更多任务。但是,增加堆大小还意味着垃圾收集器必须处理更多对象,从而能增加 GC 暂停时间。
图 4. 平均暂停时间
图片看不清楚?请点击这里查看原图(大图)。
GC 间隔和暂停时间共同构成了垃圾收集所耗费的时间。垃圾收集所花费的时间百分比将显示在 IBM Monitoring and Diagnostic Tools for Java - Garbage Collection and Memory Visualizer 工具中,并且可以使用以下公开计算得出:
各种情况下垃圾收集所占用的时间以及形成的吞吐量(每秒请求数)如图 5 所示。
图 5. 垃圾收集所战用的时间和吞吐量
图片看不清楚?请点击这里查看原图(大图)。
建议将 DayTrader 应用程序的初始和最大堆大小设置为 1024 MB。至此,您的边际收益将开始逐渐递减,因为进一步增加堆大小将不会带来成比例的性能改进。这在较长垃圾收集间隔时间与较短暂停时间之间达到了平衡,从而减少了垃圾收集所花费的时间。
JVM 调优的另一个重要方面是垃圾收集策略。三种主要的 GC 策略如下:
optthruput:(默认)当应用程序暂停时,在垃圾收集过程中执行标记和清扫操作,以便最大限度提高应用程序吞吐量。
optavgpause:在应用程序运行时并发执行标记和清扫操作,以便最大限度缩短暂停时间;这将提供最理想的应用程序响应时间。
gencon:区别对待短期和长期对象,同时提供较短的暂停时间和较高的应用程序吞吐量。
DayTrader 应用程序并未使用许多长期对象,并且在使用默认的 GC 策略时性能最佳。但是,应用程序是各不相同时,因此您应该评估各 GC 策略,以便找到最适合您应用程序的策略。developerWorks 文章 垃圾收集策略 提供了关于 GC 策略的更多信息。
图 6 展示了通过在各种不同的 DayTrader 运行时模式下调优 JVM 堆大小所实现的性能提升。在该表中,蓝柱用于表示基准吞吐量值,而红柱表示调整所讨论的调优参数后的吞吐量值。为了便于各种运行时模式之间的相对吞吐量差异,所有度量都将与 EJB 模式基准进行比较。
举例来说,在调优之前,Session Direct 和 Direct 模式分别比 EJB 模式基准快 23% 和 86%。第二根轴上的线表示 各运行时模式下的总体性能改善。在本例中,JVM 调优为三种运行时模式带来了不同程度的改善,因为它们分别采用所特有的对象分配模式。性能改善的范围从 3%(JDBC 模式)到 9%(EJB 模式)不等。
这方面的信息将在结束对各调优参数的讨论时给出。根据上一节所提供的参数,调节各调优参数后实现的应用程序性能改善是可以累加的。本文结尾部分提供的表(图 22)列出了可用的所有调优更改带来的总体性能改善。
图 6. 调优 JVM 堆大小带来的性能改进
图片看不清楚?请点击这里查看原图(大图)。
b. 线程池大小
服务器执行的各项任务运行于 WebSphere Application Server 的许多线程池中的某个线程之上。线程池允许服务器的组件重用线程,从而避免了在运行时创建新线程来服务各个新请求。应用服务器中最常用(和调优)的三个线程池如下:
Web 容器:当请求通过 HTTP 传入时使用。在 DayTrader 体系结构图(图 1)中,可以看到大多数流量都通过 Web Container 流入了 DayTrader。
默认:当针对消息驱动 bean 的请求传入时,或者没有为特定传输链定义具体线程池时使用。
ORB:当针对企业 bean 的请求从 EJB 应用程序客户机、远程 EJB 接口或另一台应用服务器通过 RMI/IIOP 传入时使用。
与线程池相关的重要调优选项如表 2 所示。
表 2. 可调优的线程池选项
设置 | 描述 |
最小大小 | 池中准许的最大线程数量。当应用服务器启动时,最初不会向线程池分配任何线程。线程将作为分配给需要它们的应用程序服务器的工作负载被添加到线程池中,直到池中的线程数量等于在最小大小字段中指定的数值。此后随着工作负载的变化还会添加和删除一些线程。但是,池中的线程数量从来都不会低于在最小大小字段中指定的数值,即便其中一些线程是空闲的。 |
最大大小 | 指定默认线程池中的最大线程数量。 |
线程静止超时 | 指定回收线程之前应该间隔的静止时间(毫秒)。值为 0 表示无需等待,负值(小于 0)则表示永远等待。 |
假定机器包含一个应用服务器实例,则一个良好的实践是每个服务器 CPU 核心为默认线程池使用 5 个线程,每个服务器 CPU 为 ORB 和 Web 容器线程池使用 10 个线程。对于 CPU 多于 4 个的机器,默认设置通常可以满足大多数应用程序的需求。如果机器有多个应用服务器实例,则这些相应地减小这些值的大小。相反,有时也需要增加线程池大小来解决应对 I/O 较慢或后端连接需要长时间运行的问题。表 3 列出了最常调优的线程池的默认线程池大小和静止超时。
表 3. 默认线程池大小和静止超时
线程池 | 最小大小 | 最大大小 | 静止超时 |
默认 | 20 | 20 | 5000 ms |
ORB | 10 | 50 | 3500 ms |
Web 容器 | 50 | 50 | 60000 ms |
要修改线程池设置,可以在管理控制台中导航到 Servers => Application Servers => server_name => Thread Pool。您还可以使用 Performance Advisors 来获得关于线程池大小和其他设置的建议。
IBM Tivoli® Performance Viewer 是嵌入在管理控制台中的一款工具,它允许您查看几乎任何服务器组件的性能监控基础设施(Performance Monitoring Infrastructure,PMI)数据。查看器将提供建议帮助用户调优系统,并针对效率低下的设置提供一些可行的备选建议。访问 WebSphere Application Server Information Center,了解如何使用 Tivoli Performance Viewer 来启动和查看 PMI 数据。
图 7 展示了当 DayTrader 应用程序启动并在稳定、峰值负载下运行时 Web container 线程池的 PMI 数据。池大小(黄色)是池中线程数量的平均值,而活动计数(红色)是当前活动线程的数量。从这个图中可以看出,默认设置,即最多 50 个 Web 容器线程,最适合这种情况,因为所有 50 个线程都未被分配,并且并发工作负载平均使用大约 18 个线程。由于默认线程池大小已经足够,因此不需要对线程池大小进行修改。
图 7. Web 容器线程池的 PMI 数据
图片看不清楚?请点击这里查看原图(大图)。
在 WebSphere Application Server V6.x 之前,并发客户机连接与 Web 容器线程池中的线程之间存在一一对应的关系。换句话说,如果有 40 个客户机在访问应用程序,则有 40 个线程需要服务请求。在 WebSphere Application Server V6.0 和 6.1 中,由于引入了 Native IO (NIO) 和 Asynchronous IO (AIO),因此能够使用相对较少的线程来扩展数千客户连接。这解释了为何在图 7 中平均只使用 18 个线程来服务来自 HTTP 负载驱动程序的 50 个并发客户机连接。根据此信息,可以减小线程池大小,以便降低管理大小超过需要的线程池的开源。但是,这会影响服务器响应负载峰值(这时需要大量线程)的能力。应该通过仔细考虑来确定线程池的大小,包括预期的平均和峰值工作负载。
c. 连接池大小
每次当应用程序尝试访问后端库时(比如数据库),它都需要资源来创建、维持和释放到该数据库的连接。为了缓解此过程对总体应用程序资源的压力,应用服务器允许您建立一个后端连接池,用于在应用服务器上共享应用程序。连接池将连接开销分散分布在若干用户请求中,以便保留应用程序资源供未来请求使用。与连接池相关的重要调优选项如表 4 所示。
表 4. 连接池调优选项
设置 | 描述 |
最少连接数 | 要维持的最少物理连接数量。如果连接池的大小小于或等于最小连接池大小,则 未使用的超时线程(unused timeout thread) 将不会放弃物理连接。但是,池并不会单独创建连接来确保维持了最小连接池大小。 |
最大连接 | 可以在这个池中创建的物理连接的最大数量。它们是到后端数据库的物理连接。达到这个数值时,将不会再创建新的物理连接;请求者必须等待直到当前使用的某物理连接返回到池中,或者直到抛出一个 ConnectionWaitTimeoutException 异常(均基于连接超时设置)。设置较高的最大连接值有时会造成连接请求淹没您的后端资源。 |
线程静止超时 | 指定在线程回收之前应该等待的静止时间(毫秒)。值为 0 表示不需要等待,负值(小于 0)则表示永远等待。 |
调优连接池的目标是确保各线程都有一个数据库连接,并且请求不需要排队以等待访问数据库。对于 DayTrader 应用程序来说,每个任务都需要对数据库执行一次查询。由于每个线程都需要执行一个任务,因此各并发线程都需要一个数据库连接。通常,通过 HTTP 传入的所有请求都将在 Web 容器线程上执行。因此,最大连接池大小至少应该达到 Web 容器线程池的最大大小。但是,有时请求会传入到默认的线程池中,比如通过消息传递 beans 的异步模式。
总的来说,通用的最佳实践是确定哪些线程池服务任务需要 DataSource 连接并相应调节池的大小。在本例中,最大连接池大小被设置为默认和 Web 容器线程池的最大大小 (70)。要修改连接池设置,可以在管理控制台中导航到 Resources => JDBC => Data Sources => data_source => Connection pool properties。记住,从连接管理的角度来看,所有应用程序都不能具有 DayTrader 那么优异的表现,因此可以为一个线程使用多个连接。
图 8 显示了 DayTrader 在稳定状态峰值负载下使用默认连接池大小(1 最小/10 最大)运行时连接池的 PMI 数据。FreePoolSize(黄色)是池中空闲连接的数量,而 UseTime(绿色)是连接所使用的平均时间(毫秒)。从此图中可以看出所有 10 个连接始终都在使用中。除了表格指标之外,该表还显示其他一些重要指标:WaitingThreadCount 显示 33 个线程等待数据库连接的平均 WaitTime 为 8.25 ms,并且 PercentUsed 指标表明池的总体占用率为 100%。
图 8. 调优连接池之前 PMI 指标
图片看不清楚?请点击这里查看原图(大图)。
图 9 显示了将连接池大小调优为 10(最小)/70(最大)后的同一表。这表明有大量空闲连接可用,且没有线程在等待连接,从而实现了更快的响应速度。
图 9. 调优连接池后的 PMI 指标
图片看不清楚?请点击这里查看原图(大图)。
图 10. 调优连接池大小后的性能改进
图片看不清楚?请点击这里查看原图(大图)。
d. 数据源语句缓存大小
数据源语句缓存大小指定每次连接可以缓存的经过准备的 JDBC 语句的数量。WebSphere Application Server 数据源将优化经过准备的语句和可调用的语句,它可以缓存未在活动连接中使用的语句。如果您的应用程序像 DayTrader 那样使用许多语句,则增加此参数有时可以改善应用程序性能。要配置语句缓存大小,可以导航到 Resources => JDBC => Data sources => data_source => WebSphere Application Server data source properties。
可以使用一些不同的方法来调优数据库语句缓存大小。其中一个技巧就是审查所有独特的、经过准备的语句的应用程序代码(或从数据库或数据库驱动程序收集到的 SQL 跟踪),并确保缓存大小大于该值。其一种方法是迭代式的增加缓存大小并在峰值稳定状态负载下运行应用程序,直到 PMI 指标不再报告任何缓存丢弃操作。图 11 展示了连接池的相同 PMI 表,这次数据库语句缓存大小从默认值 (即 10)增加到了 60。PrepStmtCacheDiscardCount 指标(红色)表示由于缓存已满而被丢弃的语句的数量。回过头来看图 9 中的表,在调优数据源语句缓存大小之前,被丢弃的语句的数量超过 170 万条。而图 11 显示,调优缓存大小后再也没有出现丢弃语句的情况。
图 11. 调优数据源语句缓存大小之后的 PMI 指标
图片看不清楚?请点击这里查看原图(大图)。
图 12. 增加数据源语句缓存大小之后的性能改进
图片看不清楚?请点击这里查看原图(大图)。
e. ORB 通过引用传递
Object Request Broker (ORB) 通过引用传递选项确定,在处理 EJB 请求中涉及的参数对象时应该使用通过引用传递还是通过值传递语义。要找到此选项,在管理控制台中导航到 Servers => Application Servers => server_name => Object Request Broker (ORB)。默认情况下,此选项是禁用的,并且将各参数对象的副本传递给调用的 EJB 方法。与向已有参数对象传递简单的引用相比,这种方式的开销要高很多。
总的来说,ORB 通过引用传递选项基本上将调用的 EJB 方法作为本地调用对待(甚至对于带远程接口的 EJB),并避免必需的对象复制操作。如果远程接口不是绝对必需的,则一种稍微简单的、不需要调优的替代方案就是使用带本地接口的 EJB。但是,使用本地而不是远程接口,您会损失与远程接口、分布式环境中的位置透明性以及工作负载管理功能相关的一些收益。
仅当 EJB 客户机(即 servlet)和所调用的 EJB 模块位于相同的类加载器中时,ORB 通过引用传递选项才能够带来收益。这一需求意味着 EJB 客户机和 EJB 模块必须部署在相同的 EAR 文件中,并在相同的应用服务器实例中运行。如果 EJB 客户机和 EJB 模块被映射到不同的应用服务器实例(通常表示为 split-tier),则必须使用通过值传递的语义来远程调用 EJB 模块。
由于 DayTrader 应用程序在相同的 EAR 中包含 WEB 和 EJB 模块,并且两者都将被部署到相同的应用服务器实例中,因此 ORB 通过引用传递选项可用于实现性能提升。从图 13 中的度量可以看出,此选项让 DayTrader 从中显著受益,来自 servlet 的所有请求都将通过远程接口传递给无状态会话 bean。但直接模式除外,这时 EJB 容器会绕道采用直接 JDBC 和手动事务。
图 13. ORB 通过引用传递的性能改进
图片看不清楚?请点击这里查看原图(大图)。
高级调优
讨论要点:
Servlet 缓存
HTTP 传输持久性连接
大分页支持
禁用未使用的服务
Web 服务器位置
a. Servlet 缓存
WebSphere Application Server 的 DynaCache 为服务器所生成的对象和分页分段提供了一个通用的内存缓存服务。DistributedMap 和 DistributedObjectCache 接口可以在应用程序中用于缓存和共享 Java 对象,其方法是将引用存储到缓存中的这些对象中以便随后使用。另一方面,Servlet 缓存使 servlet 和 JSP 响应分段能由一组可定制的缓存规则来存储和管理。
在 DayTrader 应用程序中,每次访问用户的主页时都会显示一个 Market Summary。该摘要信息包含股票涨跌榜的前 5 名和后 5 名,以及当前的股票索引和交易量。此活动需要执行一些数据库查询操作,因此会造成加载用户主页出现显著延时。借助 servlet 缓存,marketSummary.jsp 可以保存在缓存中,这可以从基本上避免这些开销大的数据库查询操作,从而改善用户主页的响应速度。可以配置缓存对象的刷新间隔,清单 1 中的示例将该值设定为了 60 秒。Dynacache 还可以用于缓存 DayTrader 中的其他 servlet/JSP 分段和数据。本例将演示通过缓存来避免复杂的服务器操作可以实现哪些改善。
要启用 Servlet 缓存,在管理控制台中导航到 Servers => Application servers => server_name => Web container settings => Web container。必须在 cachespec.xml 文件定义到要缓存的 servlet 或 JSP 的 URI 路径,该文件位于 Web 模拟的 WEB-INF 目录中。对于 DayTrader 中的 marketSummary.jsp 来说,cachespec.xml 的内容与清单 1 相似。
清单 1. cachespec.xml
图 14. servlet 缓存的性能改进
图片看不清楚?请点击这里查看原图(大图)。
b. HTTP 传输持久连接
持久连接指定传出的 HTTP 响应应该使用持久(保持活动状态)连接,而不是在请求或响应交换后关闭的连接。在许多情况下,可以通过单一 HTTP 连接许可的持久请求的最大数量来实现性能提升。通过让每个连接可支持的持久请求不受限制,SSL 连接可以显著的性能改进,因为 SSL 连接会导致通过交换键和协调协议来完成 SSL 握手过程,从而增加开销。通过最大限度地增加每个连接可处理的请求数量,可以最大限度地减小此开销的影响。另外,通过保持连接为打开状态,而不是针对各请求打开或关闭连接,响应速度快的高吞吐量的应用程序也可以实现性能提升。当此属性设置为 0(零)时,连接将在应用服务器运行过程中一直保持为打开状态。但是,如果涉及到安全性问题,则应该仔细考虑这项设置,因为当客户机尝试建立始终活动的连接时,此参数可以帮助防止拒绝访问攻击。
可以在管理控制台中设置 HTTP 传输持久连接,方法是导航到 Servers => Application servers => server_name => Ports。然后,单击与要更改的 HTTP 传输渠道设置相关的端口的 View associated transports。
在 DayTrader 测试的过程中,每个连接的最大持久请求数量(Maximum persistent requests per connection)的值从 100(默认)更改为不受限制。图 15 中的表显示了通过 HTTP(非 SSL)和 HTTPS(SSL)访问简单的 “Hello World” servlet 的吞吐量结果(在将每个连接的最大持久请求数量设置为不受限制之前和之后)。
图 15. 将每个连接的请求数量设置为不受限制之前带来的性能改进
图片看不清楚?请点击这里查看原图(大图)。
c. 大分页支持
一些平台支持建立一大块相邻的内存区,以便能够使用比默认内存分页大小更大的内存分页。根据所使用的平台,大内存分页大小可以从 4 MB (Windows) 到 16 MB (AIX) 不等,而默认分页大小只有 4 KB。许多应用程序(包括基于 Java 的应用程序)经常能大分页中受益,因为要管理的大分页减少有助于降低 CPU 开销。
要使用大内存分页,首先需要在操作系统中定义并启用它们。各平台的系统需求也相互不同,必须在可以启用大分页支持之前配置好它们。WebSphere Application Server Information Center 提供了在平台中完成此任务的详细步骤:
调优 AIX® 系统
调优 Linux 系统
调优 Solaris™ 系统
调优 Windows 系统
在操作系统中完成配置之后,可以在 JVM 中启动大分页支持,方法是在管理控制台的 Servers => Application servers => server_name => Process definition => Java Virtual Machine 中指定 Generic JVM Arguments 设置的 -Xlp。需要注意,如果启用了大分页,则操作系统会留出一大块相阾的内存区供 JVM 使用。如果剩余内存不足以处理其他正在运行的应用程序,则会换出分页(即将内存中的分页换出到硬盘上的分页),这会显著降低系统性能。
图 16. 大分页的性能改进
图片看不清楚?请点击这里查看原图(大图)。
d. 禁用未使用的服务
禁用应用程序不需要的、未使用的服务可以改善性能。PMI 就是一个典型的例子。需要重点注意,必须启用 PMI 以便查看本文之前记录的指标并从性能审查程序获取建议。虽然禁用 PMI 会移除查看此信息的功能,但它也提供了少许性能改进。可以为各应用服务器禁用 PMI,方法是在管理控制台中导航到 Monitoring and Tuning => Performance Monitoring Infrastructure (PMI)。
图 17. 禁用 PMI 的性能改进
图片看不清楚?请点击这里查看原图(大图)。
e. Web 服务器位置
IBM HTTP Server 等 Web 服务器通常用于在 WebSphere Application Server 部署中处理静态内容,或提供工作负载管理 (WLM) 功能。在 V6 之前的 WebSphere Application Server 版本中,还需要借助 Web 服务器来有效处理数以千计的传入客户机连接,其原因归结为客户机连接与 Web 线程之间的 “一对一” 映像关系(之前讨论过)。在 WebSphere Application Server V6 及更高版本中,NIO 和 AIO 的引入免除这些需求。对于使用 Web 服务器的环境,应该将 Web 服务器实例置于不同于 WebSphere Application Server 实例的专用系统上。如果某 Web 服务器所在系统上有一个 WebSphere Application Server 实例,则它们将有效共享有价值的处理器资源,从而降低配置的总体吞吐量。
我们将 IBM HTTP Server 与 WebSphere Application Server 放置在同一台本地机器上执行了 DayTrader 测试,然后又将 Web 服务器置于远程专用机器上执行了第二次测试。表 5 显示了 Web 服务器和应用服务器置于相同系统上时各进程点用的 CPU 周期百分比。从结果中可以看出,HTTP Server 进程占用了大约 25% 的 CPU 周期,这对应此测试中所使用的 4-CPU 系统中的 1 个 CPU。
表 5. HTTP Server 的 CPU 利用率
进程 | CPU % |
WebSphere Application Server | 66.3 |
IBM HTTP Server | 26.2 |
图18 比较了这两个场景以及完全没有 Web 服务器的情况下的吞吐量和响应时间。
图 18. 使用或未使用 Web 服务器时的吞吐量
图片看不清楚?请点击这里查看原图(大图)。
异步消息传递调优
目前为止,本文的侧重点主要是 DayTrader 应用程序和 WebSphere Application Server 的核心 Web 服务和持久性方面。现在,我们将重点转到 DayTrader 如何使用 JMS 组件来执行异步处理或交易订单和监控报价变化。DayTrader 基准测试应用程序包含两个可单独启用或禁用的消息传递特性:
异步订单处理:异步订单交易处理将由一个 JMS 队列和一个 MDB 来处理。
报价一致性跟踪:一个 JMS 话题,并且 MDB 将用于监控与股票交易订单相关的报价变化。
消息传递配置有两个主要调优选项会对性能造成显著影响:消息库类型和消息可靠性。除此之外,一种更加高级的、能实现额外性能改进的调优技巧是将事务日志和文件库(如果可用)放置在速度较快的磁盘上。各主题以及相应的性能改进将在下面详细讨论。
讨论要点。
消息库类型
消息可靠性水平
将事务日志和文件库移动到快速磁盘上
a. 消息库类型
WebSphere Application Server 的内部消息传递提供者维持消息传递引擎“数据库”的概念。数据库充当由引擎处理的消息的持久存储库。在单服务器环境中创建了一个消息传递引擎之后,系统会创建一个基于文件的库来作为默认数据库使用。在 WebSphere Application Server V6.0.x 中,默认数据库将由一个本地的 in-process Derby 数据库提供。基于文件和 Derby 的数据库非常适用于单服务器场景,但不能提供最高水平的性能、可伸缩性、可管理性或高可用性。要满足这些需求,可以使用一个远程数据库数据暂存器:
本地 Derby 数据库数据暂存器:通过此选项,可以使用一个本地 in-process Derby 数据库来存储操作信息以及与消息传递引擎相关的消息。虽然适用于开发目的,但此配置需要使用应用服务器中的宝贵 CPU 周期和内存来管理存档的消息。
基于文件的数据暂存器:(默认)如果配置消息引擎使用基于文件的数据暂存器,则操作信息和消息将持久化到文件系统中,而不是数据库中。其执行速度比本地 Derby 数据库更快。并且,如果使用了快速硬盘,比如独立磁盘冗余阵列(RAID),其执行速度可以与远程数据库相媲美。下面显示的测试结果并未使用 RAID 设备作为基于文件的数据暂存器,并且未返回此额外改善。
远程数据库数据暂存器:在此配置中,远程系统中的数据库将充当消息引擎数据暂存器。这将释放应用服务器 JVM 进程占用的之前用于管理 Derby 数据库基于文件的暂存器的 CPU 周期,从而允许使用一个性能更加出众的生产级数据库服务器(比如 IBM DB2® Enterprise Server)。使用数据库作为数据暂存器在技术方面的一个优势是,一些 J2EE™ 应用程序可以共享 JDBC 连接,从而受益于单相提交优化。请参见关于通过共享连接获取单相提交优化收益的更多信息。文件暂存器不支持这种优化。
DayTrader 使用这三种不同的消息暂存类型运行于 EJB 异步模式之下。在运行过程中,我们启用了跟踪规范 org.apache.geronimo.samples.daytrader.util.Log=all 来捕获接收 TradeBrokerMDB 消息的所用的时间。在测量异步消息传递性能时,让度量以异步 MDB 响应时间为基础为非常重要的 —— 而不是实际的同步分页响应时间。图 19 中的结果表明,远程数据库数据暂存器能实现最佳性能,因为它提供了最短的 MDB 响应时间和最高的吞吐量。
图 19. 消息暂存器类型性能比较
图片看不清楚?请点击这里查看原图(大图)。
b. 消息可靠性水平
消息的可靠性对于任何消息传递系统来说都是一个非常重要的因素。WebSphere Application Server 消息传递提供者提供了 5 种不水平的可靠性:
尽可能保证非持久性(Best effort non-persistent)
极速非持久性(Express non-persistent)
可靠的非持久性(Reliable non-persistent)
可靠的持久性(Reliable persistent)
可以保证的持久性(Assured persistent)
持久消息始终会保存到某种形式的持久化数据暂存器中,而非持久化消息通常存储在易变内存中。消息交付的可靠的和交付该消息的速度之间是一种权衡关系。图 20 显示了使用可靠性水平不同(可以保证的持久性和极速非持久性)的文件暂存器的两种测试的结果。结果清楚地显示,随着可靠水平提高,处理消息的速度会变得更快。
图 20. 消息可靠性水平的性能比较
图片看不清楚?请点击这里查看原图(大图)。
c. 将事务日志和文件暂存器移动到快速磁盘
由于磁盘 I/O 操作开销较大,因此将日志文件存储在 RAID 这样的磁盘上可以显著改善性能。在大多数 RAID 配置中,将数据写入到物理媒介中的任务将由多个驱动器共享。此技巧产生的结果是会更多地采用的并发的方式来访问存储以持久化事务信息,以便更快地访问日志中的数据。
可以在管理控制台中设置事务日志目录,方法是导航到 Servers => Application Servers => server_name => Container Services => Transaction Service。
在创建 SIBus 成员的过程中,可以使用 AdminTask addSIBusMember 中的 -logDirectory 选项,或者通过管理控制台 SIBus Member 创建面板来指定文件暂存器日志目录(File store log directory) 。
图 21 显示了两种测试的运行结果:一个测试将事务日志和文件暂存器存储在本地硬盘上,而另一个测试将它们存储在一个 RAMDisk 上(这会从本质上将内存区作为硬盘对待,以实现更快的读取和写入操作)。运行测试时,我们使用了极速非持久性可靠性水平。结果表明,将日志存储在快速磁盘上时,响应时间和吞吐量指标较高。
图 21. 使用快速磁盘的性能改进
图片看不清楚?请点击这里查看原图(大图)。
结束语
IBM WebSphere Application Server 的宗旨是能够满足应用程序不断增加的需求,并且这些应用程序有各自的独特特性、需求和服务。这种灵活性也承认了这样一个事实:任意两个应用程序都不会采用完全相同的的方式来使用应用服务器,同时也没有一组调优参数可以为任意两个不同的应用程序提供最佳的性能。
虽然 DayTrader 可能不同于您的应用程序,但判定采用何种调优的方法是相同的。关键是根据应用程序体系结构确定并专注于应用程序所使用的主要服务器组件和资源。通常而言,许多应用程序都可以通过调优以下三个核心区域实现一定程度的性能改进:JVM、线程池和连接池。其他一些可以调优的参数也能实现非凡的效果;但是,它们通常涉及应用程序所使用的具体 WebSphere Application Server 特性。
本文讨论了这些可以调优的核心参数,以及其他一些能让 DayTrader 应用程序获益的选项。对于这些选项,我们都提供了找到它们的方法,提供了一些通用建议和要注意的权衡事项,并了指明了相关工具。图 22 显示了应用这些调优选项之后每个 DayTrader 运行时模式的总体性能改善:
JVM 堆大小
线程池大小
连接池大小
数据源语句缓存大小
ORB 通过引用传递
Servlet 缓存
不受限制的持久性 HTTP 连接
大分页支持
禁用 PMI
图 22. 应用调优选项之后的总体性能改善
图片看不清楚?请点击这里查看原图(大图)。
从图中可以明确看出,本文所述调优在 EJB 模式下实现了 169% 的改善,在 Session Direct 模式下实现了 207% 的改善,并在 Direct 模式下实现了 171% 的改善。这是相当可观的改善,并且在其他应用程序中也可以实现类似的改善;但是,您必须记住最终的结果会因本文所述因素以及其他一些因素而异。
希望本文所讨论的信息和工具能帮助您更加轻松地调优特定应用程序的应用服务器。
Tags:WebSphere Application Server
编辑录入:爽爽 [复制链接] [打 印]- ››WebSphere Application Server 7.0 XML Feature P...
- ››WebSphere 反向投资者: 解决 WebSphere Applicati...
- ››WebSphere sMash 的创新应用,第 2 部分: 借助包装...
- ››Websphere MQ v6集群的负载均衡新功能
- ››WebSphere Process Server V6.0.2 集群,第 2 部分...
- ››WebSphere Process Server V6.0.2 集群,第 1 部分...
- ››WebSphere MQ性能调优浅谈
- ››WebSphere配置资源库管理
- ››WebSphere中的SSL/TLS:用法、配置和性能
- ››websphere ejb远程/本地调用总结
- ››WebSphere Application Server对SIP的支持
- ››WebSphere Process Server V6 体系结构概述
更多精彩
赞助商链接