原创 SSH登陸遠程Linux服務器運行VisualVM, 進行Java性能分析

SSH登陸遠程Linux服務器是普遍的方式,下面講述如何使用Putty,Xming工具在Windows機器上SSH登陸到Linux服務器,並運行VisualVM可視化界面程序,進行Java性能分析。 Step 1: 配置Linux服務器上

原创 通過Tomcat的Http11NioProtocol源碼學習Java NIO設計

Tomcat的Http11NioProtocol協議使用Java NIO技術實現高性能Web服務器。本文通過分析Http11NioProtocol源碼來學習Java NIO的使用。從中可以瞭解到阻塞IO和非阻塞IO的配合,NIO的讀寫操作

原创 Storm的故障容忍性

本文講解了Storm故障容忍性(Fault-Tolerance)的設計細節:當Worker、節點、Nimbus或者Supervisor出現故障時是如何實現故障容忍性,以及Nimbus是否存在單點故障問題。 這篇博客的內容是關於Storm官

原创 WebApp由於需要從Spring官網下載schema文件導致啓動時長時間卡住問題的分析和解決

我們的WebApp是使用J2EE和Spring實現,並運行在Tomcat容器。在某天夜裏11點左右上線了一個新的功能,但是重新啓動Tomcat卻發現WebApp一直沒有啓動成功。 通過kill -3 pid命令打印出線程Dump,發現一

原创 Play從2.6.x開始使用Akka HTTP作爲默認服務後端

在Play 2.6.x之前,Play默認使用Netty服務後端。 而到了2.6.x,默認服務後端換成了Akka HTTP, 但還是可以通過手動選擇Netty服務後端。想升級到2.6.x,就需要注意到這一點了。因爲Akka HTTP服務器要

原创 理解Play框架線程池

Play框架是一個自低向上的異步Web框架,使用Iteratee異步處理數據流。因爲Play內核中的IO不會被阻塞, 所以Play中線程池比傳統Web框架使用更少的線程。 因此,如果你準備寫阻塞IO代碼,或者潛在需要做很多CPU密集型工作

原创 Redis 發佈/訂閱

SUBSCRIBE, UNSBUSCRIBE和PUBLISH實現了發佈/訂閱消息範型。關於這個範型,在Wikipedia上的解釋是發送者(發佈者)沒有程序化地指定他們消息的具體接收者(訂閱者)。 發佈的消息根據特徵放入到對應的通道,並且無

原创 Redis的數據類型和抽象概念的介紹

Redis不是一個簡單的鍵值存儲,事實上它是一個數據結構服務器,支持不同類型的值。這意味着在Redis中值並不限於一個簡單的string,而是可以支持更復雜的數據結構,不像在傳統的鍵值存儲中,你只能關聯一個String鍵到一個String

原创 Play框架的Netty Http服務器實現

Play使用Bootstrap初始化服務器Channel,設置Channel類,EventLoop和Handler等。 (Play沒有使用專爲服務器準備的ServerBoostrap,而是使用更加通用的Bootstrap。這樣就可以自己安

原创 ZooKeeper源碼分析:Log和Snapshot持久化(SyncRequestProcessor類)

事務日誌的持久化是在SyncRequestProcessor類中實現,並會按照一定的規則滾動日誌(關閉當前文件,創建一個新文件),以及生成新的Snapshot。在持久化過程中,使用組提交(Group Commits)來優化磁盤io 操作。

原创 Zookeeper的日誌和磁盤使用

服務器使用事務日誌來持久化事務。在接受一個提案之前,服務器(Follower和Leader)需要將提案中的事務持久化到事務日誌中。事務日誌是服務器本地磁盤的一個文件。事務按順序附加到這個文件。服務器時不時的會關閉當前文件,創建一個新文件來

原创 Full GC分析:設置Java VM參數實現在Full GC前後自動生成Dump

本文講解了如何設置Java VM參數實現在Full GC前後自動生成Dump。共有三個VM參數需要設置: HeapDumpBeforeFullGC 實現在Full GC前dump。 HeapDumpBeforeFullGC 實現在Full

原创 Storm源碼分析入門:使用Counterclockwise遠程單步調試Storm的Java和Clojure源碼

單步調試代碼可以非常直觀地瞭解程序運行過程中狀態變化。本文講述瞭如何使用Counterclockwise遠程調試Storm的Java和Clojure源碼。這樣可以更加直觀和清晰地瞭解Storm源碼。步驟如下: Step 1: 安裝Coun

原创 Zookeeper: Session的狀態和生命期

Zookeeper的Session生命期(Lifetime)是從創建到結束的這段時間。Session的結束可能是被優雅地關閉,也可能是因超時而被關閉。在講Session的行爲之前,我們需要先考慮一下Session可能出現的狀態,以及改變這

原创 使用Redis實現優先級隊列

優先級隊列是一種如先進先出隊列和堆棧數據結構的抽象數據類型。所不同的是每一個元素關聯一個“優先級”。優先級高的元素比優先級低的元素優先得到處理。本文講解如何基於Redis的SORTED SET數據類型實現優先級隊列。 SORTED SE