1. 程式人生 > >生產問題排查與程式設計的一些思考

生產問題排查與程式設計的一些思考

最近處理生產上的一些問題,對程式設計和程式設計有了一些新的認識。淺談一下。

1、Servlet

servlet這個東西,可以用來做對外服務的介面,釋出一個上下文就可以使用http呼叫。也許很多時間我們只是簡單地override了doGet和doPost方法,呼叫業務處理完print回去。如果這個業務處理很費時,那麼這個servlet執行緒就會一直不能回收。我們知道一個tomcat能接受的最大併發是有限的。所以如果servlet容器資源用盡,很難接收後續的http請求。servlet 3.0的新特性async-supported幫我們解決了這個事。它允許我們把servlet執行緒的業務處理給執行緒池去做,自身可以馬上返回servlet池中。當子執行緒處理完業務後,再用持有的respone物件輸出實際的響應。

2、主執行緒與子執行緒

程式使用了httpClient工具,最近發現ajax經常出現java.net.SocketTimeoutException: Read timed out,查了這個請求,是呼叫應用的一個介面。一開始總是以為可能是網路因素導致超時什麼的。看了超時時間,設了10s,夠長了,還是會出現。經驗豐富的宋工說,看是不是該請求的鏈過長導致響應慢。有理,查之。發現方法裡有一處地方使用HttpClient呼叫了另一個系統的介面,而這個接口裡,有呼叫中介軟體寫資料庫和呼叫微信介面的操作。所有的程式碼都是同步的,意味著哪一個地方處理費時,就會導致最開始那個ajax的響應慢甚至超時。

所以啊,設計程式時,要充分知道哪些地方是可能會耗時長的,比如大IO讀寫,遠端呼叫,讀寫資料庫等等。這些地方,最好是啟用單獨的執行緒處理。對於需要返回值的,可以用

Future。如下程式碼。heavyWork()會做很費時的操作,我們用的一個Future來代替他,主執行緒中可以asyncGetUser(),把Future引用存在map中,這樣主執行緒可以在其他地方通過future.get()獲取到結果,而不是卡在這裡。
另外提點建議,程式中一些重要的業務處理,應該針對性地輸出執行時間來,比如超過多少秒的,要打印出來,這樣出問題好找。
public Future<User> asyncGetUser() {
    Future<User> future = threadPool.submit(new Callable<User> {
        public
User call() throws Exception
{ return heavyWork(); } } return future; }

3、推送
專案二期客戶需要一個推送的 功能。坐席通過線上客服給客戶的券商app推送一些訊息。這東西不像 IM 那樣經常會有資料傳輸,可能是不定時才會有一兩個訊息,所以讓app一直保持一個socket連線不好,當然這個功能可以已方來做。現在也有很多成熟的推送產品,如百度雲,極光等。他們會提供一個要整合到app的sdk,開發用的jar包,一套api,帳號和地址等等。sdk的onNotificationClicked會監測到點選行為並跳轉到指定的activity。使用者的app是沒有整合推送軟體的。還有一點是現在的推送產品也是很多,都提供了簡單的整合方式和開發要求,也穩定高效,比自己實現好得多。


相關推薦

生產問題排查程式設計一些思考

最近處理生產上的一些問題,對程式設計和程式設計有了一些新的認識。淺談一下。 1、Servlet servlet這個東西,可以用來做對外服務的介面,釋出一個上下文就可以使用http呼叫。也許很多時間我們只是簡單地override了doGet和doPost方法,呼叫業務處理完p

關於Java健壯性的一些思考實踐

try 所有 arraylist 策略 img executor 自動化 其他 返回 程序健壯性非常重要,要怎麽玩怎麽寫才能讓程序更加魯棒呢?我又這麽幾點小建議。 一、進行統一的業務處理響應 根據螞蟻金服開放平臺的標準返回,一個 response 至少應當有4個返回值。 1

OpenTSDB 生產應用思考(轉)

多個 數據 設計時 兩種 需要 htm base 層級 num 轉自:https://yq.aliyun.com/articles/623275 OpenTSDB 官方介紹 http://opentsdb.net/overview.html 這裏就不翻譯了。

C Primer Plus(第6版)第四章程式設計練習答案+一些思考

       奉上第三章程式設計練習答案,同時附加一點個人討論:        在第七題中,題目要求我們通過float.h標頭檔案的FLT_DIG和DBL_DIG兩個明示常量了解float和double兩種浮點數型別

使用MVVM嘗試開發Github客戶端及對程式設計一些思考

本文中我將嘗試分享我個人 搭建個人MVVM專案 的過程中的一些心得和踩坑經歷,以及在這過程中目前對 程式設計本質 的一些個人理解和感悟,特此分享以期討論及學習進步。 緣由 最近在嘗試搭建自己理解的 MVVM模式 的應用程式,在這近一個月中,我思考了很多,也參考了若干Github上

RHEL7.X系列及周邊Linux發行版中,關於MBRGPT的選擇一些思考建議

一.引言 儲存的選型、規劃與管理等工作一直以來都是日常系統運維工作中的重點。MBR與GPT兩種型別的分割槽表的選擇與使用則是在磁碟管理中需要根據應用場景來注或考慮的要點。結合筆者多年的運維工作經驗,引發了對這些問題的一些思考,藉此文進行一些分享。 二.相關知識點 2.1 MBR 主引導記錄(Maste

對於gtk多執行緒程式設計一些思考以及實踐歸納

寫一個gtk的介面很久了,因為慢慢的在改良我的軟體,所以也開始發現一些棘手的問題,當然,我這邊指的問題只是gtk執行緒方面的問題,或者說如何才能執行一個介面以外的任務而使得介面不卡死,這樣的任務包括多種多樣,我這邊有一些完成的方式,還有一些還沒實現的,請大家聽我一一道來。 首先我給大家列舉幾

關於Java健壯性的一些思考實踐!

程式健壯性非常重要,要怎麼玩怎麼寫才能讓程式更加魯棒呢?我又這麼幾點小建議。 一、進行統一的業務處理響應 根據螞蟻金服開放平臺的標準返回,一個 response 至少應當有4個返回值。 1、isSuccess:呼叫是否成功 2、data:返回的響應資料 3、errorCode:錯

CAP理論MongoDB一致性、可用性的一些思考

  大約在五六年前,第一次接觸到了當時已經是hot topic的NoSql。不過那個時候學的用的都是mysql,Nosql對於我而言還是新事物,並沒有真正使用,只是不明覺厲。但是印象深刻的是這麼一張圖片(後來google到圖片來自這裡):        這張圖片是講資料庫(包括傳統的關係型資料庫和

幀同步的一些思考(四):Kcp RakNet 測試比較

測試程式碼 測試內容 伺服器以 66 毫秒 傳送 400 位元組的資料包,檢視客戶端前後 2 個包的時間間隔 弱網模擬 本次測試做以下2種測試: 伺服器輸出方向模擬 類似: tc qdisc add dev $NETCARD root

上完形勢政策課的一些思考

今天下午聽了一節形勢與政策課,老師慷慨激揚,義憤填膺,每句話都戳到我們當代大學生的心裡。其實我挺喜歡這個老師的,因為她敢“罵”我們,她們給我們上課永遠都是恨鐵不成鋼的樣子。由於課程的安排,每學期只能跟她見兩次面,但每節課可以說都是給我們敲響了警鐘。 記得她說過最深刻的一句話是,北大都那個熊樣了,

被DDoS後的及時補救一些思考

最近3天,我的小站godbmw.com經歷了2次DDoS。第一次因為沒有限制QPS,短短几分鐘內CDN被盜刷了300G流量。第二次完善了相關保護措施後,CDN依然被D了90G的流量。經過2天的遷移和補救,終於使得網站服務恢復正常。用此篇記錄下整個奮戰過程。希望

關於 mysql 中 find_in_set like 查詢的一些思考

前段時間專案中,使用到了mysql中的find_in_set 查詢,因為原先沒有使用過此方法,故進行了些許研究。 如mysql官方文件所說,find_in_set (str ,  strlist) 函式,查詢欄位(strlist)中包含 str 的結果,return 為 符

PCA等降維操作深度學習的不同點的一些思考

深度學習的本質上是將資料從低維空間對映到高維空間,但是並不僅僅有這個作用,拿全連線層舉例,假設輸入資料500維,可以對映到1000維做一個升維操作,也可以降維到256維,但往往經過一個完整的神經網路後

關於效率、程式生活的一些思考

前一段時間看了兩本書《高效程式設計師的45個習慣——敏捷開發修煉之道》和《高效能程式設計師的修煉》。書名很相似,讀完這兩本書花的時間也差不多,都是兩個星期左右。兩本書內容差別卻不小。不過,總結起來一句話:都是好書! “變”——讀《高效程式設計師的45個習慣》所想到的 《高效

關於Ceph現狀未來的一些思考

Ceph從2004年提交了第一行程式碼,至今為止已經10年了。這個起源於Sage博士論文,最早致力於開發下一代高效能分散式檔案系統的專案,現在也成為了開源社群眾人皆知的明星專案。特別是隨著雲端計算的發展,Ceph乘上了OpenStack的春風,受到各大廠商的待見,Inte

SNMP++ 04-SNMP中OBJECT IDENTIFIER的BER編碼解碼及一些思考

閱讀完本文你可以學到: (1)SNMP 中 OBJECT IDENTIFIER 的 BER 編碼與解碼程式碼實現。 (2)在學習 OBJECT IDENTIFIER 編解碼過程中的一些思考(思考過後,懂得當涉及對無符號陣列進行傳輸編碼時,可以給出一個較佳的方案)。 (3)s

資料同步的一些思考改進

資料同步的一些思考與改進 背景 閒的沒事,自己寫了個小網站,搭建在自己國外的VPS上,VPS記憶體極小(512M),而且還要跑點別的(你懂的),記憶體更緊張巴巴. 改造之前小網站用到了時髦的Redis,Rabbmitmq,Mysql,那時候阿里雲的學生主機記憶體富足,裝這麼多中介軟體壓力不大,可到了這樣的小記

關於遞歸的一些思考

log 它的 sta 數列 自己的 rec system stat 0.00 關於遞歸: 遞歸的實現,使代碼更加整潔清晰,但是當數據較大的時候,並不能體現出它的優點。 代碼: /** * @fuction * @author mly11 * @date 2017

關於產品的一些思考——(四十二)網易之有道雲筆記協同版

mil 新版本 strong dsm article 思考 post 有道 就會 ————————————————————2014.07.17———————————————————— 先前的使用體驗,補上。 在使用協同版的時候。一個筆記僅僅要點擊了編輯。就會生