摘要: 原創(chuàng)出處:www.bysocket.com 泥瓦匠BYSocket 希望轉(zhuǎn)載吨拍,保留摘要枣宫,謝謝婆誓!
四時不謝之蘭,百節(jié)長青之竹也颤,萬古不敗之石洋幻,千秋不變之人。
1. AOP – LOG
項(xiàng)目中翅娶,一個請求過來文留,一個響應(yīng)回去好唯。
經(jīng)常我們需要記錄請求過來的對應(yīng)的 類,方法名燥翅,請求參數(shù)和IP等一些信息渠啊,還有響應(yīng)出去的,如果是 JSON 結(jié)果集的話权旷。比如現(xiàn)在一般暴露給前端(前后端分離)替蛉,或者其他模塊基本走 Restful 接口。那怎么優(yōu)雅的去記錄這些東西呢拄氯?
beta 1.0
@Path("user/get")
publicListResult getUser(@BeanParamGetUserParam getUserParam){
LOGGER.info(getUserParam.toString());
ListResult userList = userService.getUserList(getUserParam);
LOGGER.info(userList.toString());
returnuserList;
}
同樣躲查,硬編碼加入了兩句打印的代碼,其實(shí)這個沒這么簡單译柏×椭螅可能日志需要輸出到日志平臺,可能獲取IP或者請求來源的一些信息鄙麦。那怎么升級會優(yōu)雅呢典唇?Annotation + AOP可能不錯哦!
realease 1.0
@Path("user/get")
@ApiAdvice
publicListResult getUser(@BeanParamGetUserParam getUserParam){
ListResult userList = userService.getUserList(getUserParam);
returnuserList;
}
ApiAvice 的實(shí)現(xiàn)原理是基于 Spring AOP 和 SPring 自定義注解完成胯府。具體這篇文章寫得差不多:http://www.xdemo.org/springmvc-aop-annotation/
2. 出介衔、入?yún)⒎庋b
上一點(diǎn)說到了,請求入?yún)⒑晚憫?yīng)出參骂因。
入?yún)⑻峁┮粋€ BaseParam炎咖,包含了 IP ,請求來源機(jī)器,機(jī)型等各種寒波。PagerParam 繼承 BaseParam 類乘盼,增加了分頁相關(guān)的參數(shù)。比如俄烁,用戶的參數(shù) UserGetPagerParam..
出參提供一個 BaseResult绸栅,包含返回碼,返回信息及請求 IP等页屠。PlainResult 單個結(jié)果集粹胯,ListResult 列表結(jié)果集,MapResult…
同樣卷中,兩者需要實(shí)現(xiàn)序列化矛双。序列化的可以看看這個文章?http://www.infoq.com/cn/articles/serialization-and-deserialization
3. LIMIT
在處理線上問題的時候渊抽,有時候會有臟數(shù)據(jù)要進(jìn)行處理蟆豫。自然 DDL 操作,需要通過審批什么的懒闷。這里就不說了十减。主要在 UPDATE 操作的時候栈幸,注意 SQL 的寫法。防止一條 SQL 誤操作了其他正確的數(shù)據(jù)帮辟,加個 LIMIT 限制語句速址。例如
UPDATE user SET name="BYSocket" WHERE name="Jeff" LIMIT 1.
http://database.51cto.com/art/201005/200401.htm
4.Guava EventBus
Guava EventBus 是基于事件處理機(jī)制,是設(shè)計模式中的生產(chǎn)消費(fèi)模式的實(shí)現(xiàn)由驹。使用的場景:多半在異步的場景上芍锚。但是基于 JVM 內(nèi)存上實(shí)現(xiàn)的,通俗的說是單機(jī)模式蔓榄。需要評估好并炮,這個異步是否是非常快速可以處理完畢甥郑。具體使用見
http://www.cnblogs.com/peida/p/EventBus.html
5.GC常用分析命令
這個總結(jié)來自有次 FullGC 特別多逃魄,OOM 的場景。然后是這樣操作分析的:
jps -lvm // 查看JVM進(jìn)程中的狀態(tài)澜搅,并得知 JVM 的具體配置
jstat -gcutil {pid} 1000 // 每秒鐘打印 GC 信息伍俘,可以看下 full GC,各種區(qū)的 實(shí)時信息
jmap -F -heap {pid} // 查看內(nèi)存對象信息
主要是
jmap -dump:format=b,file=dump.bin {pid} // 導(dǎo)出內(nèi)存對象 dump 文件
然后分析工具很多勉躺,這里用IBM HeapAnalyzer 具體使用看:?http://blog.csdn.net/alexbxp/article/details/6756411
JVM 相關(guān)也看看
JVM 參數(shù)配置:http://www.cnblogs.com/redcreen/archive/2011/05/04/2037057.html
JVM 監(jiān)控命令:https://my.oschina.net/feichexia/blog/196575
如以上文章或鏈接對你有幫助的話癌瘾,別忘了在文章結(jié)尾處評論哈~ 你也可以點(diǎn)擊頁面右邊“分享”懸浮按鈕哦,讓更多的人閱讀這篇文章饵溅。