聚會時間公告: 因應COSCUP 2011, Kalug 8月份休會一次

四月 5, 2009
» JRE 64Bit 多版本於 GNU/Linux 性能測試報告(老魚版)

測試套件: javolution


說明:
javolution 提供一個性能較佳的集合(Collections)類別為主,
也是 L2J Project 中所採用的, javolution 提供一個實時與嵌入式系統
(Real-Time and Embedded Systems)
的解決方案, 目前最新版本為 5.3.0.

在 L2J Project 中為了盡可能達到實時(Read-Time) MMORPG 的特性,
MMORPG(大型線上即時角色扮演遊戲)經常性大量必須採用 Collections APIs,
甚至於必要使用共時(Concurrent)多執行緒(Multi-Threads),
javolution 在這部份的優異性,
被用來替代原有 Java SE 中 java.util.* java.util.concurrent.* 中的集合 APIs.
  • Java(TM) Solution for Real-Time and Embedded Systems
  • Version 5.2.6 (J2SE 1.6+) July 22 2008

測試條件值:
  • javolution Collections 類別對抗 Java SE 1.6+ Collections classes.
  • java -server -Xms512M -Xmx512M -jar javolution.jar perf
  • 重覆執行 3次後, 記錄報告
測試主機環境:
  • Xeon E3110 3.0G(雙核) L2=6MB, FSB=1333MHz, 8G RAM
  • GNU/Linux Server Ubuntu Server 9.04 64BIT
  • Linux 64BIT + JRE 64 BIT 可以突破 -XmxXXXM 在 Windows OS上的不足限制.
    • Ex. Windwos 2003 Server 32BIT (1GB OS core, 3GB Processing)
JRE 目標版本(64-BIT - Server VM):
  1. OpenJDK 7 Project (非系統侵入式)
  2. OpenJDK 6 Project (非系統侵入式)
  3. Oracle JRockit JVM (非系統侵入式)
  4. Apache Harmony (非系統侵入式)
  5. IBM JRE for Linux (非係統侵入式)
  6. Ubuntu 9.04 套件庫 - OpenJDK 6 (系統侵入式/系統最佳化)

Java JRE 目標版本及各別測試報告結果:
  1. OpenJDK 7 Project
    1. java version "1.7.0-ea"
      Java(TM) SE Runtime Environment (build 1.7.0-ea-b52)
      Java HotSpot(TM) 64-Bit Server VM (build 15.0-b03, mixed mode)
  2. OpenJDK 6 Project
    1. java version "1.6.0_14-ea"
      Java(TM) SE Runtime Environment (build 1.6.0_14-ea-b03)
      Java HotSpot(TM) 64-Bit Server VM (build 14.0-b12, mixed mode)
  3. Oracle JRockit JVM
    1. java version "1.6.0_05"
      Java(TM) SE Runtime Environment (build 1.6.0_05-b13)
      BEA JRockit(R) (build R27.6.0-50_o-100423-1.6.0_05-20080626-2104-linux-x86_64, compiled mode)
  4. Apache Harmony
    1. Apache Harmony Launcher : (c) Copyright 1991, 2008 The Apache Software Foundation or its licensors, as applicable.
      java version "1.5.0"
      pre-alpha : not complete or compatible
      svn = r713673, (Nov 14 2008), Linux/em64t/gcc 4.1.1, release build
      http://harmony.apache.org
  5. IBM JRE for Linux
    1. java version "1.6.0"
      Java(TM) SE Runtime Environment (build pxa6460sr4-20090219_01(SR4))
      IBM J9 VM (build 2.4, J2RE 1.6.0 IBM J9 2.4 Linux amd64-64 jvmxa6460-20090215_29883 (JIT enabled, AOT enabled)
      J9VM - 20090215_029883_LHdSMr
      JIT - r9_20090213_2028
      GC - 20090213_AA)
      JCL - 20090218_01
  6. Ubuntu 9.04 套件庫 - OpenJDK 6 (系統侵入式)
    1. java version "1.6.0_0"
      OpenJDK Runtime Environment (IcedTea6 1.4.1) (6b14-1.4.1-0ubuntu4)
      OpenJDK 64-Bit Server VM (build 14.0-b08, mixed mode)



性能表現的優劣比:
  • OpenJDK 7 > OpenJDK 6(系統侵入式) > OpenJDK 6 > Oracle JRockit JVM > IBM JRE
  • OpenJDK 7 在性能表現上, 在約近 40項的測試中, 少部份的 Collections API 已開始呈現超越 javolution.
    • New java.util.LinkedList.add(element)
    • Recycled java.util.ArrayList.add(element)
    • New java.util.HashSet.add(element) , (but Recycled: X)
    • Iterates over java.util.ArrayList
    • New java.util.HashMap.put(key, value)
    • Recycled java.util.HashMap.put(key, value)
    • 其餘仍由 javolution 呈現領先.
將來持續保持更新報告內容於:
http://sites.google.com/site/aionjtw/07-ce-shi-testing/javolution

二月 28, 2009
» 月底了忙什麼? 學習與分享是共生且持續一生的!

迷時師度,悟了自度 ! ~六祖壇經

今天是二月的最後一日, 不少人問老魚說:
這個月怎只寫了二篇Blog文 ... 產能嚴動下滑 ...
老魚的回答:" 你們只看到了事物的表面, 卻忽略了它的本質! "
老魚沒啥優點, 只有一個心, 我喜歡學習所以我不停的閱讀, 都到了這老年紀了,
我從來沒有停止過, 且會持續的分享老魚心得~呵



那這個月產能去了哪呢 ? 全都在老魚 Blog 的右上部份之中 !
老魚不喜歡把 Blog 搞的五花八門, 該屬於那一方面的知識分享,
老魚會盡可能直接分派到右上的各各老魚子專案中 ...

回顧這二月份, 我想我不得不說這是我最大收獲的一個月,
相隔快10多年, 我再回到了學校當學生, 修習著 趙善中 教授 的 (系統架構學),
吳仁和 教授 物件導向系統分析與設計—結合MDA與UML,
雖然對老魚來說技術不再是那麼重要, 但從這二位教授的講課當中,
卻讓老魚思考的方式有著極大的影響 ...
他們讓老魚看到了老魚缺乏的思考方式 ... (將來再來分享給大家上課心得)

就因為這樣, 老魚大幅度的重新編排了右上連結中的一個專題名稱與內容,
就是受惠於二位教授的授課給老魚的新啟發,

唉~就如同本篇最前的名言 迷時師度,悟了自度 ! ~六祖壇經
很多時候我們不管到了什麼年紀, 老了 ? 那年輕的一代也可能成為吾師,
每個人都在某一方面, 某一時間點, 成為他人的教授者,
而不是他的年齡, 高貴貧窮而有分別 !

這個月老魚在 MMORPG系統架構分析與Java開發設計之研究 重新編排,
也利用在聽課中得到的知識, 運用於該主題網站之中,
更請原團隊分工合作, 我們在這個月完成了不少內容,
希望有心想學習或是分享的您一同來參與它的完成.

在這篇順便替這個團隊打個廣告及徵才:

L2J-Game Team
一個分工合作已有數年的台灣中文 L2J 愛好者的共享團隊.
分支於 L2J EN, 並進行特有的模組開發與中文化遊戲內容.

這團隊有著自己專屬的 討論區, 會員人數不到半年已近 500人,
有著專屬高頻寛的 SVN 軟體版本控制系統供我們進行開發,
有著這份最棒的知識分享平台 MMORPG系統架構分析與Java開發設計之研究,
更有著高達50MB雙向頻寬且近 1000人同時在線人數的經營示範伺服器:
我們希望能透過 "知行合一" 的方式來學習 MMORPG 的知識與分享心得,
或者您只是想體驗開發成果, 您也可以到遊戲中可以遇到本團隊的開發者們哦~
如果您想參與分享與學習, 非常的歡迎您來參與這團隊在未來的每一天.

一月 16, 2009
» [Java線上遊戲伺服器]同時線上人數上升造成的問題與解決參考

先來看幾個小篇 Videos 在 3D多人同時線上GAME中,
最經常看到的就是大型的玩家齊體的活動畫面,
例如攻城, 盟戰, 狩獵 ...等等







因為上述的遊戲內容,
造成老魚時常收到這樣類似的二岸中文用戶對 L2J 架設 Mail 來信詢問同樣的相關問題 ...

例如近日的來信:
  • 您好!郭朝益老师
  • 我是大陆的一个天堂2爱好者(极品玩家).呵呵 我有一个问题困扰了我很长时间.
  • 我在我们学校内架设了一个L2J版本的天堂2服务器(学校的网络是100兆的宽带 服务器CPU:Intel 四核至强 E5320 8G内存).不知道什么原因,只要人超过200人在线时候服务器就会卡的很厉害,如果到300人在线时候基本上就玩不了了.然后我把服务器端重新启动后就好了.但过一会还是一样卡的很厉害...."""
(老魚我先聲明我沒鼓勵這樣的行為哦~呵)
(當然這現象在正式的商業線上遊戲公司是不能發生的品質現象,
商業公司可以透過購置高階資訊設備, 及增加資訊專家群來克服)

老魚今天要談論的是一項"學術交流", 更何況無商業化的經費預算~呵
"在經費受到嚴重限制下的 MMORPG Server 的管理之道"
這背後涉及到的可能問題, 卻可能來自任何一個層面...

基本上頻寬是足夠的, 但往往因GS(Game Server)處理速度過慢,
導致伺服器產生Lag(形容造成畫面延遲的現象),
這也通常大多發生在玩家們進行大型狩獵活動, 或者血盟戰時,
因同一時間瞬間大量 Data 來自玩家進行對玩家或NPC狀態變化的技能,
傷害處理程序需龐大的資料運算, 造成 Server 在處理上產生 CPU 滿載 100% ,
系統也常高次數的必須對實體儲存體進行 I/O 處理現象發生,
再加上 Server 亦需要回傳給所有Client 的玩家們 ...
以致於可能讓伺服器可能延遲超過數十分鐘, 或因RAM堆疊處理資料超出,
導致甚至更久或 Server 完全停止.

基於開放源碼 Java 與對 3D MMORPG 的研究者來說, 經費有限的情況下處理,
老魚建議由下面的參考:

除擁有保持學習心態的網路伺服器管理員之外, 目前可進行的改善空間為:
  1. 當然首先更強的硬體主機, 尤其是 CPU.
  2. 優品質的網路線路頻寛!
  3. 作業系統的種類: 建議以 GNU/Linux 為主. (重點)
  4. Firewall : 建議阻斷所有與遊戲伺服器有關之外的所有連入連線 Port.
  5. 防毒軟體 : 如果有遵從上述三點, 那大可不需要, 且可大幅減少因防毒軟體對系統資源的不必要浪費性.
  6. Java JDK 版本, 建議以較新的版次先, 通常也擁有較佳的 JVM 性能表現.
  7. 隨時留意是否有 l2j 重大或者必要的更新.
  8. 持續您對系統安全的監視, 例如惡意的阻斷式服務攻擊」(Denial of Service, DoS)的來源 IP 封鎖任務.
額外的可能問題與再增強:
  1. 於適當的時間點進行系統重置, Reboot.
  2. 裝載以實體RAM層模擬成檔案系統儲存層的技術或軟體, 減少I/O的真實往返, 資料再定期(例如 15分)寫回真實的資料儲存層.
  3. SSD 碟替代傳統軸承硬碟
  4. 劃分 LS, GS, DB 為各自獨立的硬體主機.
  5. 切割玩家的所在伺服器世界
  6. 進行第三點的負載平衡(Loading Balance, LB)建置工程, 幻想著 ... SAN@@"
目前較無法由 Server 管理者克服的問題:
  1. Client 服務對象玩家本身的頻寬品質低劣人數過多, 造成Server必須"等待"處理過長, 拖累整體Server效能表現.
  2. NPC 獨立伺服器
更多的補充將直接載文於:
另外 L2J-GAME 中文團隊正在招募新血成員, 歡迎想參與學習這方面的知識朋友加入,
不限二岸三地的愛好者們.

四月 8, 2008
» (Java線上遊戲伺服器實作教學) 從 GM 處理器開始入門 !

很多小沙瀰跟老僧反應起 ... 很想深入了解這 L2J Server 的 Java Code,
但力不從心, 大多數的原因來自對這專案中上千個的 Java Code Files 不知從何看起好 ...

經過與 (m121752332) 的討論, 建議大家從 GM 處理器了解起最好,
GM 處理器的實作 Code 有助於開發者從 GM 需要用到的功能與撰寫的程式碼,
並配合 Trace Code 的閱讀技巧來了解整個 Game Server 實作的全貎.

花了些時間做了以下的圖~送給看官們!
希望有心人得以研究來接任這專案的發展~呵
看圖總比看文字來的吸收快~記得點圖放大再收藏哦!


站內文章參考:

» (Java線上遊戲伺服器實作教學) 總目錄索引-001

緣起 ...
從當一位教授 Java 的老師以來, 加上經常與小沙瀰間的回饋性溝通來論,
如何在擔負本寺軟體開發人才的培育成果, 優異於一般寺外教學成績,
是老僧一直思索的問題 ... (當個善"導"引師, 比當個照本宣科師來的有人生價值咩~呵)
Java EE 的範圍太廣且對小沙濔們來說, 因未必能實作到真實的專案, 而感到空虛,
減少不少"主動"學習的意願 ...

沒錯! "學習從主動開始!"
就如同這篇文的標題, 這是個很棒的 Java 實作專案題材, 誘導自我學習兼併娛樂 !
少了 Java EE 範圍, 卻可以讓 SCJP 的認證範圍深耕,
又可從中實作與了解 Online Game 的開發過程用到的相關技術,
專注厚實在 Java SE 應用開發能力, "根基越深越能走的遠!"~呵

基於上述的理由, 老僧我從這篇就開始來編教材囉~
實作嘛 ... 就拿"天堂2 (Lineage 2)" 這全 3D 的 Online Game 來當題材~

(雖然不是當今最紅的~但別忘了我們學習的初衷哦~)
至於為什麼呢?
1.南韓NC Soft 美學大作
2.遊戲內容的設計對 Server-Side 的開發來說夠挑戰複雜的第一名 ... )
=================================================
感謝 l2jtw 專案開發負責人 (m121752332) 協助指導本教材內容.

總目錄索引 (最近修正日期: 2008-04-03)

一.前言 (就是本篇文囉)

  1. 何謂 MMORPG (大型多人線上角色扮演遊戲) ? (Wikipedia link)
二. MMORPG C/S 運作原理

三.SVN版本控制系統原理講解與安裝 Subclipse for Eclipse
1.取得 Java 開源碼專案: L2J Server/DataPack SVN 原始碼
2.Ant 編譯 L2J 源碼解說與實作
四.學習資料庫系統的進階 SQL 操作語法 (DBMS)
五.L2J DP(Data Pack)原始碼的概括性目錄結構說明 (DP)
1.物品兌換功能的實作 (XML)
六.介紹 CSV 與任務配置以及導入的規劃 (DP)
1.PY腳本說明與製作
七. Config 的配置介紹 LS 和 GS 連結架構
1.單一登入驗證伺服器(Login Server)+單一遊戲伺服器(Game Server)實作
2.單一登入驗證伺服器(Login Server)+多點遊戲伺服器(Game Server)實作

八.Game Server 程序開發
1.從 GM 處理器開始入門 !
2. 深入了解 L2jObject Java物件體系關係/繼承/實作
(待補)

老魚的舊文章參考
Java線上遊戲伺服器研究聚會-2007-10-09(結論)
[Java線上遊戲伺服器教學日誌] 運作原理與SVN開發環境

四月 3, 2008
» (Java線上遊戲伺服器實作教學) MMORPG C/S 運作原理

這一節我們來透過老僧製作的下圖來帶領大家作初步的了解.
雖然都是老僧的經驗談, 不過我可是很用心的寫給您看哦 ^ ^"
看圖說故事 ... 呵
(點圖放大~再收藏!)
MMORPG 開發架構概要圖


MMORPG 指的是 (大型多人線上角色扮演遊戲),

原文全名是 "Massively Multiplayer Online Role Playing Game",
雖然初期都被用在設計商業型遊戲, 不過這幾年也開始被運用在國防, 教育學習中了.

MMORPG 是同時間有著數量巨大的客戶端(Clinet), 同時向同一來源的伺服端(Servier)請求服務,
就好比上圖中最上方的藍色曲線, 首先 Client-Side 籍由特定的遊戲軟體的連線器(Connector),
透過 TCP/IP 向 Server-Side 的 登入驗證伺服器(Login Server; LS) 進行連線,
LS 要求輸入與比對玩家(Player)帳號與密碼資料在資料庫(Database),
正確後 LS 即將 Player 連線轉交給 遊戲伺服器(Game Server; GS) ...

GS 是整個 Server 的程序開發重心, 含蓋著映射(Mapping) 所有 Game 內容,
例如 Game 裡的所有物件(Object), 地理資訊, 人工智慧(AI), 子任務系統,
PvP(player versus player)
, 技能(Skill), 人物狀態, 武器/防具屬性 ... 等等.

GMMS (Game Master Management System) 這是老僧自己取的@@"
俗稱的 GM 管理系統, 這是個很重要的也是很特別的"角色(Role)"設計,
為什麼要稱呼為角色呢? 嚴格來說他也是個可以被操縱的遊戲人物,
也可以被稱呼為 Game 裡的"神", 能使用著所有可進行管理的動作,
最簡單也最常見的就是"隱身"與"變換形體"來監督 Player.

在整個 GS 的專案裡會細分成二個分支開發團隊, 專責 GS 較低層的主體,
如上圖的 L2j Game Server Project, 另一個則可能被納入遊戲內容企劃的部門管理,
與前端 Player 開發團隊同屬部門別, 即為上圖專責開發遊戲細部內容的 L2j Data Pack Project.

所有連線中的 Player 的狀態會被 GS 所記錄著, 當然是儲存在 Database 囉,
透過適當的整理即可善用這 Database 來提供線上遊戲公司服務的網站系統,
如上圖中最下面的藍線, 也易於網站系統中提供 Player 帳號的註冊管理 (Account Management),
或善用 Database 中保存的 Data 產出更多貼心的服務項目.

其它閱讀:

十月 10, 2007
» Java線上遊戲伺服器研究聚會-2007-10-09(結論)

時間:
原為每週四, 但因雙十節...
小郭原本應進行的專案管理內訓改在週四
所以我們改在明天10/09 下午 1:30~6:00 進行.



本週議題:

  1. 社群目標與撰文 Blog 規範說明
    Java 遊戲伺服器開發研究所
  2. 3D MMORPG 線上遊戲伺服器運作的解說
  3. L2J PG.Chinese(天堂II Java Server Wiki)
    的 Wiki 共筆教學與 SVN 管理機制解說
  4. 實例演說
    1. 天堂II 客戶端主程式安裝與過程解說
    2. 客戶端主程式目錄結構與防駭神盾系統說明
    3. L2J Server 快速建置講解
    4. 資料庫表內容說明
    5. 客戶端主程式連線機制說明與更動 Server IP
    6. Login Server 登入伺服器與 Game Server 游戲內容伺服器
    7. 客戶端主程式操作介作與遊戲內容介紹
    8. GM 管理介面
  5. 下週必要進行議題
    1. 如何開始進行 Java Server Coding 學習
    2. L2J DataPack 結構說明
    3. L2J Server 目錄結構說明

十月 6, 2007
» [Java線上遊戲伺服器教學日誌] 運作原理與SVN開發環境

今天是小僧進行的首次的 Java 線上遊戲伺服器教學
記載本次進行的議題如下:

  1. 線上大型3D遊戲客戶端/伺服端(Client/Server)的運作原理
  2. JDBC 與資料庫間的溝通
  3. SVN/CVS講解與安裝 Subclipse for Eclipse
  4. 取得 Java 開源碼專案: L2J Server/DataPack SVN 原始碼
  5. L2J 原始碼的概括性目錄結構解說
  6. Ant 編譯 L2J 源碼解說與實作
  7. 如何開始閱讀與學習 Java 線上遊戲伺服器(L2J)開發過程
詳細教學內容載於(封閉式交流社群)
Java 遊戲伺服器開發研究所

support:

biggo.com.tw

biggo.sg

A Django site.