3/13åºçäºå®ã®å ±èãã¿ããªã®Javaãã§JDKãã£ã¹ããªãã¥ã¼ã·ã§ã³ã«ã¤ãã¦æ¸ãã¾ãã #minjava
Twitterã§æ¢ã«åç¥ãã¾ããããå ±èãã¿ããªã®Javaãã3/13ã«çºå£²äºå®ã¨ãªãã¾ããã
ã¿ããªã®Java OpenJDKããå§ã¾ã大å¤é©æ!
- ä½è :ããã ãªãã,åç° çä¹,å±±ç° è²´è£,è®æ²¼ è³¢å¿,éªç° 浩ä¸,åå¤ è³¢å¤ªé
- çºå£²æ¥: 2020/03/13
- ã¡ãã£ã¢: åè¡æ¬ï¼ã½ããã«ãã¼ï¼
- è®æ²¼ããã«ããJava EE/Jakarta EE, MicroProfileé¢é£ã®è¨äºã¯ãã¡ã
- éªç°ããã«ããGraalVMé¢é£ã®è¨äºã¯ãã¡ã
- åå¤ããã«ãã軽éãã¬ã¼ã ã¯ã¼ã¯é¢é£ã®è¨äºã¯ãã¡ã
èè 6åã®ãã¡ãããããSIerã«å¤åãã¦ããã®ã¯ç§ã ãã§ãJavaãæ§ã ãªã¨ããã§ä½¿ããã¦ãããæ¹ãã¦é常ã«å¤§ããªåå¨ã§ããã¨æãã¾ãã
ç§ã¯2ç« ã®ãJDKãã£ã¹ããªãã¥ã¼ã·ã§ã³å¾¹åºè§£èª¬ããæ å½ããã¦ããã ãã¾ããã
ä»ã¾ã§ã¯Oracle JDK/JREã®ã¿ã使ã£ã¦ããæ¹ãå¤ãã¨æãã¾ãããOpenJDKããã¼ã¹ã¨ãã¦å¤ãã®JDKãã£ã¹ããªãã¥ã¼ã·ã§ã³ãç»å ´ãã¦ãã¾ããã ãOracle社ã«ããJavaãã§ã¯ãªããã¿ããªã®Javaãã«ãªã£ããã¨ããããããé¢ãããå°ãã§ãå¤ãã®æ¹ã«ä¼ããã°å¹¸ãã§ãã
ããã¯åºæ¬çã«ãæ¨å¹´5æã«Oracle Code TokyoãJJUG CCCã¢ã³ã«ã³ãã¡ã¬ã³ã¹ã§ã話ããå 容ããã¼ã¹ã«ãªã£ã¦ãã¾ãã ã¡ããã©Oracle Code Tokyoã®ç»å£ä¾é ¼ããã£ãã®ã¨åãææãããã«ãããã ããããæ¸ç±ã«ã¤ãã¦ãã声æããããã ãã¾ããã
å½åã¯æ¨å¹´ä¸(令åå å¹´)ã«åºããããªè©±ã ã£ãã®ããä½ã ããã ã§ããã¦ãã¾ãã¾ããããç¡äºã«åºçã«ããã¤ãã¦ä½ããã§ãã æè¡è©è«ç¤¾ã®ç´°è°·ãããå°ç«¹ããã«ã¯å¤§å¤ãææ°ããå¿é ããæããã¾ãããæè¬ãç³ãä¸ãã¾ãããããã¨ããããã¾ããã
æ¨å¹´ã®æ¯ãè¿ã
幸ãã«ãæ¨å¹´ã¯åå°ã¤ãã³ãã§Oracle Code Tokyo/JJUG CCCã§ã®å 容ããã©ãã·ã¥ã¢ãããã¦ã話ããæ©ä¼ãããã ãã¾ããã
7æã®ã¤ãã³ãå 容ã¯æ¬¡ã®Togetterã§ã¾ã¨ãã¦ãã¾ãã togetter.com
ãã®å¾ã10æã11æé ã«ããã¦ãã話ããã¦ãã¾ãã
- 10/4 GlassFish Users Group Japan åå¼·ä¼
- 10/26 Salesforce女åé¨ÃJava女åé¨ÃJDKã½ã ãªã¨ ã³ã©ãåå¼·ä¼
- 11/1 çæ¬Javaåå¼·ä¼
togetter.com togetter.com ç´ æµãªã°ã©ã¬ã³ãæ¸ãã¦ããã ãã¾ããã
ä»æ¥ã®ã»ãã·ã§ã³å 容ã @nakayama_san ããã«ã°ã©ã¬ã³ã§ã¾ã¨ãã¦ããã ãã¾ããï¼ãããã¨ããããã¾ãð
— Takahiro YAMADA (@yamadamn) 2019å¹´10æ26æ¥
ãããã®JDKãã¯ã¤ã³ð·ã®ããã«ç¹å¾´ãããé«ç´ãªãã®ããã親ãã¿ããããã®ãªã©æ§ã ã«åå¨ãã¾ããã©ããé¸ã¶ãè¿·ã£ããç¸è«ã«ä¹ãã¾ãã®ã§ãã声æããã ããã¾ãã#sfggjp #javajo pic.twitter.com/ygUh1vc30z
www.slideshare.net
ããããå 容ãæ¸ç±åããããã§ãã§ããéãææ°ã®æ å ±ãåæ ããããã®ç·¨éè ã®æè¦ãè¸ã¾ããªããå çä¿®æ£ãã¦ãã¾ãã ã¹ã©ã¤ãè³æã ãã§ã¯èª¬æä¸è¶³ã ã£ãã¨ããããæ¸ç±ããä¸èªããã ããã°ããç解ããã ããã®ã§ã¯ãªããã¨èãã¦ãã¾ãã
ä»å¾ã®JDKãã£ã¹ããªãã¥ã¼ã·ã§ã³
ãã¦ãä»å¾ã®JDKãã£ã¹ããªãã¥ã¼ã·ã§ã³ãã©ããªã£ã¦ãããã«ã¤ãã¦ã軽ãäºæ¸¬ãã¦ã¿ã¾ãã
ã¾ãã¯2020å¹´12æã«å人ã¦ã¼ã¶åãã®Oracle JDK/JREã®Public Updatesãçµäºããäºå®ã¨ãªã£ã¦ãã¾ãã Public Updatesãçµäºããã¨ãOracle JDK 8ã®ææ°çãOTNãããã¦ã³ãã¼ãã§ããªããªãå¯è½æ§ãããã¾ãã ããã¦ãã¨ã³ãã¦ã¼ã¶åãPublic JREãé å¸ãã¦ãã java.com ãµã¤ãã«ã¤ãã¦ãããã®å½¹ç®ãçµããããããã¾ããã ãã¡ããã¾ã 延æãããå¯è½æ§ãããã®ã§ãããçµäºæã«ã¯å²ã¨å¤§ããªã¤ã³ãã¯ããä¸ããã§ãããã ãã ãããããç¶æ³ãä»ã¾ã§ã¨åæ§ã«Javaã³ãã¥ããã£ã®åã§ä¹ãè¶ãã¦ãããã¨èãã¦ãã¾ãã
ã¾ããAdoptOpenJDKãå©ç¨ãã¦ããã¨ããã¯ãããªãå¢ãã¦ããå®æãããã¾ãããç²ç®çã«è¿½å¾ããã®ã¯æ¸å¿µãããã¾ãã Javaã®ã¨ã³ã·ã¹ãã ã«ããã¦ã¯é常ã«å¤§ããªä½ç½®ã¥ãã¨ãªãã¾ããããTCKã«éã£ã¦ããªãã£ãããåæ¨ã®è¦³ç¹ãããå人çã«ã¯ä¸æ©å¼ãã¦è¦ãããã«ãã¦ãã¾ãã ã¹ãã³ãµã¼ã®é¢ãªã©ããããã°ããã¯å®æ³°ã¨è¨ãããã§ãããä»å¾ã«ã©ããªã£ã¦ãããã¯æ³¨ç®ãããã¨ããã§ãã
JDKãã£ã¹ããªãã¥ã¼ã·ã§ã³ã¯åºæ¬çã«ç°å¢ã»ç¶æ³æ¬¡ç¬¬ã§ä¹ãæãã¦ããã®ãããã¨èãã¦ãã¾ãããæ¸ç±ããã®ä¸å©ã«ãªãã°å¹¸ãã§ãã
5/17 Oracle Code Tokyo, 5/18 JJUG CCCã¢ã³ã«ã³ãã¡ã¬ã³ã¹ã§OpenJDKãã£ã¹ããªãã¥ã¼ã·ã§ã³ã®é¸ã³æ¹ã«ã¤ãã¦è©±ãã¦ãã¾ãã
ã¿ã¤ãã«éãã®ã¤ãã³ãã§è©±ãã¦ãã¾ããã
ã²ã¨ã¾ãTogetterã§ã¾ã¨ãã¦ããã¾ãã®ã§è³æãªã©ããã¡ãããã©ããã
ãOpenJDKãã£ã¹ããªãã¥ã¼ã·ã§ã³ã®é¸ã³æ¹ #codetokyo19 #codetokyo19B3 #jjug_ccc #ccc_l5 #OpenJDKã½ã ãªã¨ãããã¥ã®ã£ãã¾ããã https://t.co/XZV0fWdQiB
— Takahiro YAMADA (@yamadamn) 2019å¹´5æ25æ¥
ããå年以ä¸è¿½ã£ã¦ãããããã¯ã§ããããã¤ã¼ããã¦ããå 容ã®é大æããªã¨å人çã«ã¯æã£ã¦ãã¾ãã GW10é£ä¼ã®ååã¯é¢é£ãããã¤ã¼ããã¾ã¨ãã¦ãå¾åã«è³æã«èµ·ãããæãã§ããã ããããã¾ã§ãOpenJDKã½ã ãªã¨ãã¿ã°ã®ã¤ãã¾ã¨ããå¤ãåºæ¥ä¸ããã¾ããï½
ã»ãã·ã§ã³è³æã®è£è¡¨ç´ã«ãè¨è¼ãã¦ããã®ã§ããããããã¯Javaé¢é£ã³ãã¥ããã£ã®æ¹ã ãé¢ä¿è åä½ãå«ãã å¤ãã®çæ§ã¨ã®ããåãããååã«ãã£ã¦çã¾ãããã®ã§ããæ¹ãã¦æè¬ãç³ãä¸ãã¾ãã
æ®å¿µãªããã¾ã Java/JVMçéã§ã¯æ··ä¹±ããã°ããç¶ãããã§ãã®ã§ãããå°æ¹ã®åå¼·ä¼ãã«ã³ãã¡ã¬ã³ã¹ã§ãéè¦ãããããã§ããããOpenJDKã½ã ãªã¨åºå¼µç·¨ã¨ãã¦ä¼ºãã¾ãã®ã§ãæ°è»½ã«ã声ãããã ããï¼
ããã°ã«æ¸ããã¨æã£ã¦ããã®ã ããããå°æ¹ã«ã³ãã¡ã¬ã³ã¹ãååå¼·ä¼ãªã©ã§OpenJDKã½ã ãªã¨ãã¿ãå¿ è¦ã§ãããæ¯éã声ãããã ããã
— Takahiro YAMADA (@yamadamn) May 23, 2019
å人çã«ã¯éæå¤ãåæã ã¨ãããããã§ãï½
(æè¡ã³ãã¥ããã£ã«åå ãããããªæ¹ã ãªããããå 容ãç解ãã¦ãæ°ããã¾ããä¸å¿â¦)https://t.co/bc5bpZAQtJ
ãã¦ãç°¡åã«ã§ããå½æ¥2æ¥éãæ¯ãè¿ãã¾ãã
5/17 Oracle Code Tokyo
Oracle Code Tokyoã®å身ã§ããJava Day Tokyoã«2015å¹´ã«ã¹ãã³ãµã¼ã»ãã·ã§ã³ã§ç»å£ãã以æ¥ã®å¤§ããªã¤ãã³ãã§ããã
ä»åã¯åå è 層ã2015å¹´ã¨ã¯ã¾ã£ããç°ãªãã¾ããããããããã¾ã§æºå¡å¾¡ç¤¼ã¨ãªãã¾ããã
ãã¤ã®éã«ãç§ã®ã»ãã·ã§ã³ãæºå¡ã«ãªã£ã¦ããããããã¨ããããã¾ãðââï¸ https://t.co/YKabHN03C9
— Takahiro YAMADA (@yamadamn) May 10, 2019
Javaçéã®å¼·ãé¢ã ãååã«éã¾ããå§ã¾ãã¾ã§ã¯ããªãç·å¼µãã¾ããããå¤ãã®æ¹ã«èå³ãæã£ã¦åå ããã ããããã§ä½ããã§ãã
ãã®åéã«ã¤ãã¦ã¯ããããã£ã¦ããªãã®ã§ãããTwitterã§è°è«ããã®ãããã©ããããªã£ã¦ã³ã¡ã³ããã¦ããªãã¨ãããããã®ã§ãå½æ¥ãèããããã¾ãï¼
— Yuichi Sakuraba (@skrb) May 11, 2019
å®ã¯ãwww.oracle.co.jpããã¡ã¤ã³å ã§ãã¯ã¦ãªããã¯ãã¼ã¯æ°é ã¨ãã¦ã¯1ã»2çªç®ã¨ãç§ã®è³æã¨ãªãã¾ããã 2015å¹´ã®ã»ãã·ã§ã³è³æã®æ¹ãã¾ã æ°ãå¤ãã®ã§ãããééããªãä»åã®æ¹ãåãå ¥ãã¦ããã¤ããã§ãã
ç»å£ã®æ©ä¼ãä¸ãã¦ããã ããæ¥æ¬ãªã©ã¯ã«ã®ä¼è¤æ¬ãããé¢ä¿è
ã®çæ§ãããã¨ããããã¾ããã
ã¾ããä»ã¾ã§ç´æ¥é¢èããªãTwitterã§ããåããã¦ããæ¹ã
ãå½æ¥ã®ã¤ãã³ãã«æ¥ã¦ããã ãã¦ãæ¨æ¶ã§ãããããã®å¾ã®é£²ã¿ä¼ãçãä¸ããã楽ããä¸æ¥ãéãããã¨ãã§ãã¾ããã
è¥å¹²å¿æ®ãã ã£ãã®ã¯è±èªã¤ã³ã¿ãã¥ã¼ã®æ¿è«¾ãé ãã¦ãã¾ã£ã(å²ã¨ç´åã®æ¡å ãªã®ã«ç· åæ©ããã§ãããâ¦)ããã«ãå½æ¥ã«åãããªãã£ããã¨ã¨ãã¡ãã£ã¢ã¹ãã³ãµã¼ãå¤ãã£ãã«ãé¢ããããç§ã®ã»ãã·ã§ã³ã«ã¯èª°ãåæã«æ¥ã¦ãããªãã£ããã¨ã§ããããå¾è ã«ã¤ãã¦å¤§æã¡ãã£ã¢ã®å½±é¿ã¯ãã¯ã大ãããã®ã§ãOracleå´ã®ä¸»å¼µããåãä¸ããªããã¨ã§ "Java æåå"ã®ã誤解ããä»ãç¶ãã¦ããç¶æ ã度ã 観測ãã¦ãã¾ãâ¦
5/18 JJUG CCC
JJUG CCCã»ãã·ã§ã³ãä»ã¯ããªãæ¿æ¦åºã¨ãªã£ã¦ãã¾ãã¾ãããã2013 Fall以æ¥ã®è©±ãå´ã¨ãã¦ã¢ã³ã«ã³ãã¡ã¬ã³ã¹ã«ãã¿ãåºãã¦ã¿ã¾ããã
åæ¥ã®ã¤ãã³ãã§ã¯åºæ¬çã«ä¸æ¹éè¡ã§å
容ããä¼ãããå´ã§ãããããã¾ãå
¬ã®å ´ã§ã¯è©±ããªããããªãããç¨åº¦ã¶ã£ã¡ãããåãã£ã¹ããªãã¥ã¼ã¿ã¼ã®ååã話ããããåå è
ã®æ¹ã
ã®æè¦ãªã©ãèãã¦ã¿ããã£ã次第ã§ãã
CCCååå è åãã®ã©ã³ãã»ãã·ã§ã³ã§ãå®è¡å§å¡é·(åä¼é·)ã®é´æ¨éä»ããããããããªããOpenJDKã½ã ãªã¨ãã®ç´¹ä»(?)ããã£ããããã®ã«ã¯é©ãã¾ããï½
çªç¶ã® OpenJDKã½ã ãªã¨ #ccc_cl
— ç³â¯ç ãã¡ã (@mike_neck) 2019å¹´5æ18æ¥
ã¡ãªã¿ã«æç°ããã¯ãOpenJDKã½ã ãªã¨ãã®åä»ã親ã§ãã
åæ¥ã®Oracle Code Tokyoã¨JJUG CCCã§ã¯åå è 層ãç°ãªããã¢ã³ã«ã³ãã¡ã¬ã³ã¹ã®ãã¼ãã«ãå¤ãã®æ¹ãæ票ãã¦ããã ãããããã§ããã¡ããçæ³ã¨ãªãã¾ããã å¸ä¼é²è¡ãåãã¦ããã ãã寺ç°ä½³å¤®ãããã¯ãããã¹ã¿ããã®çæ§ãåå è ã®çæ§ãããã¨ããããã¾ããã
寺ç°ããã«ã¯åæ¥ã®ã¤ãã³ãã«ãåå ããã ããå½æ¥ã«ã¯ãã¾ãä¼ããããªãã£ãã®ã§ãããåOpenJDKãã£ã¹ããªãã¥ã¼ã·ã§ã³ã調ã¹ã¦ããã¢ããã¼ã·ã§ã³ã¯æ¬¡ã®ãããªæãã§ãã
ã©ã¡ããã¨ããã¨ãJava/JVMã®ã³ãã¥ããã£ãã¨ã³ã·ã¹ãã ããèªåã«ã¨ã£ã¦ã¯ãã¡ããã ãã©ãå¤ãã®äººã«ã¨ã£ã¦é常ã«å¤§ããåå¨ã ã£ã¦ãã¨ãä¸çªå¤§ããã¢ããã¼ã·ã§ã³ãªæ°ã¯ããã
— Takahiro YAMADA (@yamadamn) May 19, 2019
ç¹ã« #codetokyo19 ã®ã»ãã·ã§ã³ã§ä¼ãããã£ãã®ã¯ãã®è¾ºãããªã(ã¾ã è³æå ¬éããã¦ãªããã©)
ã»ãã·ã§ã³ãTogetterã¾ã¨ãã®é ããã¼ãã§ãããã®ã§ãããJava/JVMé¢é£ã³ãã¥ããã£ãã¨ã³ã·ã¹ãã ã®éè¦æ§ã¯æ¬å½ã«å¤§ããã¨æãã¦ãããå¾®åãªãããè²¢ç®ã§ããã°å¹¸ãã§ãã
ãã¡ããä»ã®ã»ãã·ã§ã³ãæ親ä¼ãé常ã«æ¥½ããã£ãã§ããJJUG CCCã®äºæ¬¡ä¼ã«è¡ã£ãã®ãæ°å¹´ã¶ããªæ°ããã¾ããããããã§æµ·å¤ã®Java Championãã¯ããå¤ãã®æ¹ã¨è©±ãæ©ä¼ãå¾ãããã®ã¯è²´éãªæ©ä¼ã§ããã
ä»å¾ãJJUGã§ã¯è±èªã»ãã·ã§ã³ãå¢ããã¦ããæ¹åæ§ã®ãããªã®ã§ãã¾ãã¾ãè±èªãé å¼µããªãã¨ãªããã¨ã¯æã£ã¦ãã¾ãããç§å人ã¨ãã¦ã¯æ¥æ¬ãã¡ã¼ã¹ã(?)ã®ç²¾ç¥ã§å½é¢ã¯é å¼µãããæ°ããã¦ãã¾ãã
ã©ã¡ãã®ã¤ãã³ããå ±éãããã¨ã§ãããä¸åå è ã¨ãã¦ã ãã§ã¯ãªããç»å£ããå´ãã¹ã¿ããã«åãã¨ã(大å¤ã§ãã)ãã楽ããããã¨ãå®æããäºæ¥éã§ããã
éå»ã®çµç·¯ãªã©ãæ¯ãè¿ããã¨æã£ãã®ã§ããããã¾ãã«é·ããªã£ã¦ãã¾ãã®ã§å¥ã®æ©ä¼ã«ã
Software Design 2019å¹´1æå· - 第2ç¹é 第1ç« "Javaã®ãã¼ã¸ã§ã³ã¢ããã¨ä»ãåã£ã¦ããããã«" ã¸ã®ã³ã¡ã³ããããã¯æ£èª¤è¡¨
ååã®è¨äºã§ãåèè³æãããã¤ãæãã¾ããã yamadamn.hatenablog.com ãã®ä¸ã§ãå æ¥çºå£²ããããSoftware Design 2019å¹´1æå·ãã®ç¬¬2ç¹é "Javaã®ãã¼ã¸ã§ã³åé¡ã«ååãã«åãçµãæ¹æ³" ã®ç¬¬1ç« "Javaã®ãã¼ã¸ã§ã³ã¢ããã¨ä»ãåã£ã¦ããããã«" ããç¾æ®µéã§ã¾ã¨ã¾ã£ã¦ãããé常ã«æç¨ã ã¨æãã¾ãã ãã ãããã¤ãç´°ããã¨ããã§è¨æ£ãããç®æãããã¾ããã
ããããã®è¨äºã帰ãã®é»è»å ã§èªãã§ããã©ãããã¤ãç´°ããç¹ã§è¨æ£ãããç®æããããªã
— Takahiro YAMADA (@yamadamn) 2018å¹´12æ19æ¥
ãã¡ãã大çã¨ãã¦ã¯ã¾ã£ããåé¡ãªããã©ãã¬ãã¥ã¼é ¼ã¾ããªãã£ããä»æ¹ãªããï½https://t.co/8Lj9FWOfAd
ãã¼ããæ£èª¤è¡¨ã¬ãã«ãªææãªãã§ãããï½
— Takahiro YAMADA (@yamadamn) 2018å¹´12æ19æ¥
ã¡ãã£ã¨ä»æ¥ã¯å¸°ã£ã¦ããæéãªãã®ã§ãã©ããã§æ°ãåãã°ã
ã¨ãã訳ã§ãæ£èª¤è¡¨ã¬ãã«ã§ããè¨äºã¨ãã¦æ®ãã¦ã¿ã¾ãã
ãã¡ããå®éã«æ¸ç±ã¨ãã¦å·çããéã«ã¯ãç´é¢ãã¹ã±ã¸ã¥ã¼ã«ã®é½åã»ãã©ã³ã¹ãªã©ãæ§ã ãªãã¬ã¼ããªãããã£ããã¨ã¯æ³åã«é£ãããã¾ããã ãã®ãããããã¾ã§ç§ãäºåã«ã¬ãã¥ã¼ããã¨ãããããã®è¾ºããã³ã¡ã³ããããããããªããã¨ãç解ãã ããã
以éãåºæ¬çã«ãè¦åºã(ç¯)ã該å½ç®æãé¨åçã«å¼ç¨(ãã¼ã¸çªå·å«ã)ããã³ã¡ã³ããã¦ããã¾ãã
åæ¸ã
å ¨ä½ã¨ãã¦Javaãæååãããã¨ã¯ä»ã®ã¨ãããªãã®ã§å®å¿ãã¦ãã ãã (P62)
"ä»ã®ã¨ãã"ã ã¨ãä»å¾æååãããå¯è½æ§ãããã¨ãè¥å¹²ä¸å®ãç ½ãæ¥æ¬èªãããããªãã®ã§ä½è¨ããããã¾ããã èå¯ã¯ããªããããã®è¨äº Javaのリスク考察 2018年版 - プログラマーの脳みそ ã詳ããã§ããã"Javaãæååãããã¨ã¯ãªã" ã¨è¨ãåã£ãæ¹ãããããã§ãã
Javaã®ä½ãå¤ãã£ãã®ãï¼
Javaã®ãªãªã¼ã¹ã«é¢ããå¤å
â¼è¡¨1 Oracle JDKã¨Oracle OpenJDKã®ãµãã¼ãã®éã (P63)
Java 6ã®[åãã¼ã¸ã§ã³ããã®æé]ãã1å¹´3ãµæãã¨ãªã£ã¦ãã¾ããã2å¹´3ãµæããæ£ããã§ãã
Oracleãæä¾ãããã¤ããªã®å¤å
ãã®2ã¤ã®ãã¤ããªã¯å 容çã«ã¯ã¾ã£ããåããã®ã§ãã (P64)
å®éã«ã¯ç´°ããã¨ããã§ãjava -versionã®åºåãé å¸ç©(主ã«ã©ã¤ã»ã³ã¹æ å ±)ãªã©ç°ãªãããã"ã¾ã£ããåã"訳ã§ã¯ãªãã"ã»ã¼åã"ããããé©åãã¨æãã¾ãã
OpenJDKãæä¾ãããã³ãã¨ãã®ãµãã¼ãå 容
ãã¨ãã°Red HatããAzul SystemãAdoptOpenJDKããã¸ã§ã¯ããªã©ã§ãã (P64)
Azul Systems ã¨"s"ãã¤ãã®ãæ£ç¢ºã§ãããAdoptOpenJDKã"ããã¸ã§ã¯ã"ã¨ããããã¯ã³ãã¥ããã£ã¨ãã£ãã»ããæ£ç¢ºããããã¾ããã
â¼è¡¨3 Oracle JDKã¨Oracle OpenJDKã®ãµãã¼ãã®éã (P64)
Oracle JDKã®[ãªãªã¼ã¹]ãã3å¹´ãã¨(LTSã ã)ãã¨ãªã£ã¦ãã¾ãããå®éã«ã¯non-LTSãåºã¦ãµãã¼ãæé(Premier Support)ã6ãµæã§ãã LTSã®[ã¢ãããã¼ãæä¾]ãã5å¹´ããæé·8å¹´ãã¨ãªã£ã¦ãã¾ãããããã¯"æç"ã®æéã§ããã延ã³ãå¯è½æ§ãããã¾ãã (å è³æããæ¶ãã¦ãã¾ã£ãã®ã§å¾®å¦ã§ãããéæã«ã¯"At least"ã§æ³¨ææ¸ããããã¾ãã)
ããããç¹ã¯ä»ã®ãã³ãã¼ãä¼¼ããããªãã®ã§ãããæ¸ãæ¹ã¨ãã¦ãéLTSã¯6ãµæãLTSã¯æç5å¹´ãã8å¹´ãã¨ããã»ããå人çã«ã¯ãã£ããæ¥ã¾ãã
COLUMN: ãµãã¼ãã¨ãã³ã
注A) IBMãSAPãªã©ãOpenJDKã§ã¯ãªãç¬èªå®è£ (P65)
SAPã®SapMachineã¯ä¸é¨ã®éãã¯ãããã®ã®OpenJDKãã¼ã¹ã§ãã
â¼è¡¨4 ãã³ããæä¾ããOpenJDK (P64)
å ã®è¡¨3ã®ã³ã¡ã³ãã¨åæ§ã§ãã ã¾ãã¿ã¤ãã³ã°çã«ã©ããããããªãã®ã§ãããRed Hatã¯Windowsçã®OpenJDKã«ã¤ãã¦åç¨ãµãã¼ããæä¾ãããã¨ãæè¿çºè¡¨ããã¾ããã
Javaã®ãã¼ã¸ã§ã³ã¢ããã«å¯¾ããæ¹é (P69-71)
大ãã3ã¤ã®æ¹éãç´¹ä»ããã¦ãã¾ãããåºæ¬çã«AdoptOpenJDKãªã©ã«ããç¡åã®ã¢ãããã¼ããåæã¨ããè¨è¼ã¨ãªã£ã¦ããã¨æãã¾ãã
æåãµãã¼ããç· çµããããã§ãããå°ãé·ãæé(ã·ã¹ãã ã®å¯¿å½ã«åãããã5年以ä¸)使ãç¶ãã¦ãããã¼ã¸ã§ã³ã¢ããããé¸æè¢ãå²ã¨ããã¨æãã¾ãã æ¹éã¨ãã¦ã¯ "3ã4å¹´ãã¨ã«ãã¼ã¸ã§ã³ã¢ãããã" ã¨ããã»ã©å¤ããã¯ãªãã®ã§ãããæ¥åã·ã¹ãã ã§ã¯ããå°ãæ éãªã¦ã¼ã¶ãå¤ãã¨æãã¾ãã 西éããã®ã¤ã³ã¿ãã¥ã¼è¨äº "ãJava 8ã¯ãã¤ã¾ã§ä½¿ãç¶ãã¦ãããã§ããï¼ãGeorges Saabæ°ã«èããJavaã®ãã®å " ãèæè¦ã¨ãã¦ã¯è¿ãããããã¾ããã
"Javaã®ãµãã¼ãããªã·ã¼å¤æ´çã«é¢ããæè¡ã¬ãã¼ã" ã«æè¦ãã¦ã¿ã
å®ã«2å¹´ã¶ãã®ããã°ãæ¸ãã¦ã¿ã¾ããã¤ãã§ãªã®ã§ãã¯ã¦ãªãã¤ã¢ãªã¼ãã移è¡ãã¦ã¿ã¾ããã
Javaã®ãªãªã¼ã¹ãµã¤ã¯ã«å¤æ´ã«é¢é£ãã¦ãä¸éãæ å ±ãåºæã£ã¦ãã¾ããã ä¸é¨ã§ã¯æ¥çµxTECHãªã©ã§ç¸å¤ãããé ·ãè¨äºãéç£ãã¦ä¸å®ãç ½ãç«ã¦ã¦ãã¾ãããJavaã¯ä»ãç¡åã§ãããOracle JDK/JRE以å¤ã«ãæ§ã ãªé¸æè¢ããããã¨ã¯ä»æ´è¨ãã¾ã§ãããã¾ããã
ãã¦ãæ¥æ¬ã§ã¯æ¿åºCIOãã¾ã¨ããæ¨æºã¬ã¤ãã©ã¤ã³ç¾¤ããããå®å ¬åºã®æ å ±ã·ã¹ãã åãã®æéãæ示ãã¦ãã¾ãã ãã®ä¸ã«æè¡ã¬ãã¼ãã¨ã㦠"Javaã®ãµãã¼ãããªã·ã¼å¤æ´çã«é¢ããæè¡ã¬ãã¼ã"1ãããã¾ãã "2018å¹´4ææç¹ã®æ å ±ã«åºã¥ã" ã¨è¨è¼ããã¦ãã¾ãããç¡åã§å©ç¨ããããã®é¸æè¢ãOracle OpenJDKã«ã¤ãã¦ãã触ãããã¦ããªãããã«è¦ãã¾ãã
- 2019å¹´3æ28æ¥ã«æ¹è¨çããªãªã¼ã¹ãããAdoptOpenJDKãã¯ã©ã¦ãä¸ã®ãµãã¼ã(AWS+Amazon CorrettoãAzure+Azul Systems)ãªã©è¿½è¨ããã¾ããã
å種ã¬ã¤ãã¸ã®ãæè¦ã¯ãã¡ãã¾ã§ãé¡ããã¾ãã å é£å®æ¿ æ å ±éä¿¡æè¡(IT)ç·åæ¦ç¥å®¤ãE-Mailï¼i.it-dashboard_atmark_cas.go.jp
â»è¿·æã¡ã¼ã«é²æ¢ã®ãããatmarkã¯ï¼ ã«ç½®ãæãã¦ãã ããã
ã¨ã®ãã¨ã ã£ãã®ã§ãä»æ´æã¯ããã¾ããã以ä¸ã®éãæè¦ãåºãã¦ã¿ã¾ããã
å é£å®æ¿ æ å ±éä¿¡æè¡(IT)ç·åæ¦ç¥å®¤ ãæ å½è æ§ ãä¸è©±ã«ãªãã¾ããå±±ç°ã¨ç³ãã¾ãã https://cio.go.jp/sites/default/files/uploads/documents/technique_report_java.pdf ãã¡ãã§æ²è¼ããã¦ããã¬ãã¼ãã«ã¤ãã¦æè¦ããããã¡ã¼ã«ãå·®ãä¸ãã¾ããã 5æã«æ¬ã¬ãã¼ããçºè¡¨ããã¦ãããæ§ã ãªåãããããå 容ãå¤ããªã£ã¦ãã㨠è¦åãããã¾ãã®ã§ãæ¹è¨ãããã ãããåãã¾ãã å ·ä½çã«ã¯ã[ï¼ããµã¼ãã¼ç°å¢åãJavaã¸ã®å¯¾å¿] ã® [ï¼.ï¼ã対å¿æ¹é] (P5)ã«ããã¦ã æåãµãã¼ããããã¯Oracle OpenJDK(ç¡åã ãåå¹´ãµã¤ã¯ã«)ã®é¸æè¢ã®ã¿ãããã㪠æ¸ãæ¹ããªããã¦ããã¾ãããç¡åã§ãã£ã¦ã次ã®ãããªè¤æ°ã®é¸æè¢ãåå¨ãã¾ãã a) AdoptOpenJDK (MicrosoftãIBMãªã©ãã¹ãã³ãµã¼) b) Zulu Community Builds (from Azul Systems) c) Amazon Corretto (from AWS, ç¾æç¹ã§ã¯ãã¬ãã¥ã¼ç) ãããã«ã¯ãããããã¯ãã«ã«ãµãã¼ã(ãã³ãã¼ã®ååã対å¿)ã¯å«ã¾ãã¾ãããã LTSã§ã®æ´æ°ç(ã¢ãããã¼ã)ã¯ãæ¦ã4年以ä¸ã¯æä¾ãããè¦è¾¼ã¿ã§ãã ãããã®ç¡åçãå©ç¨ããé¸æè¢ã 3.3â1)â(2)(3)ã«å ãã¦ããã ãããåãã¾ãã â»å®éã®ã¨ãã a) b) ã«ã¤ãã¦ã¯ãæ¬ã¬ãã¼ããçºè¡¨ããã以åããå ¬è¡¨ããã¦ããã ãé¸æè¢ã¨ãã¦å½åããå ããã¹ãã§ãã£ãã¨èãã¦ããã¾ãã ãªãããã以å¤ã«ãç¨èªã®é¢ã§ã"Java"ã¨Oracle JDK/JREãåä¸è¦ãã¦ãããã "OpenJDK"ãOracleåºæã®ãã¤ããªã®ã¿ã示ããããªæ¸ãæ¹ããªããã¦ãã¾ããã ããããåèè³æããã¨ã«ãããæ£ç¢ºä¸ç«ãªæ¸ãæ¹ããªããããã¨ãæ¤è¨ãã ããã â åèè³æ Software Design 2019å¹´1æå· - 第2ç¹é https://gihyo.jp/magazine/SD/archive/2019/201901 åJDKãã³ãã®ååãç¥ã£ã¦Java 11ã«åããã https://gihyo.jp/news/report/2018/10/0501 ãJava is Still Freeã-Javaã®ãµãã¼ãåé¡ã¸çµæ¢ç¬¦ãè¿ãã4ã¤ã®é²å https://codezine.jp/article/detail/11258 JDKãOracle JDKãOpenJDKãJava SEã£ã¦ãªã«ï¼ https://qiita.com/nowokay/items/c1de127354cd1b0ddc5e JDKã®é·æåç¨ãµãã¼ã(LTS)ã®æä¾ãã³ãã¼æ¯è¼ï¼ç¡åå©ç¨ã«ã¤ãã¦ãè¨åããï¼ https://qiita.com/u-tanick/items/bb166929a58a4c20bb88 Javaã®ãµãã¼ãã«ã¤ãã¦ã®ã¾ã¨ã https://qiita.com/nowokay/items/edb5c5df4dbfc4a99ffb ãªããä¸è¨ã®åèè³æã¯ãæ°éJavaã³ãã¥ããã£ã®æå¿ã«ã¦ã¾ã¨ãããããã®ã§ããã æ¬ã¬ãã¼ãã® [ï¼ãåèæ å ±ã¸ã®ãªã³ã¯] ã¨ãã¦è¨è¼ããã¦ããOracle社ã®ã¿ã®æ å ±ããã å ¬å¹³ä¸ç«æ§ãä¿ããã¦ããã¨èãã¦ããã¾ãã ã¾ããããã¤ãã®åèè³æãããªã³ã¯ããã¦ãã¾ãããä¸çåå½ã®Java Championã ã¾ã¨ãããJava is Still Freeããã確èªããã ããã°ã¨åãã¾ãã (è±èªç) https://docs.google.com/document/d/1nFGazvrCvHMZJgFstlbzoHjpAVwv5DEdnaBr_5pKuHo/edit (æ¥æ¬èªç) https://docs.google.com/document/d/1HtUnuAkUEDGL2gwUOkrDrmLe_zrD6wpAyqYBZxRmHv4/edit 以ä¸ããããããé¡ãç³ãä¸ãã¾ãã
xTECHãªã©ãããã®æ¿åºCIOããåºããã¦ããã¬ãã¼ãã«å½±é¿ãåãã¦ããå¯è½æ§ããããããå°ãã§ã誤解ãåè¦ããªããã¦ãããã°ã¨æãã¾ãã
ãªããå人çãªè©±ã¨ãã¦ãOracle ACEã¯ä»å¹´åæ¥ãã¾ããããä»å¾ãJavaã³ãã¥ããã£ã«å¾®åãªããè²¢ç®ã§ããã°ã¨èãã¦ãã¾ãã ä¸é¨ã®æ¹ãããå æ¥ "OpenJDKè¦å¯"ã¨ã®ç§°å·(?)ãè³ãã¾ããããä»åã®æè¦ã¯ãã®æ´»åã®ä¸ç°ã¨ãå¼ã¹ãããããã¾ããã
-
æ¹è¨çããªãªã¼ã¹ããããããªã³ã¯åãã«ãªã£ã¦ã¾ãã↩
WebLogic Server 12.2.1ã«å¯ãã«è¿½å ãããã¯ã©ã¹ãã¼ã¿å ±ææ©è½ #jpoug
ã¯ããã«
ãã®è¨äºã¯JPOUG Advent Calendarã®10æ¥ç®ã§ãã
å
æ¥10/19ã«WebLogic Server(以ä¸ãWLS)åå¼·ä¼ã§ãWLS 12.2.1.0/12.2.1.1ã®ãã¤ãã¼ãªæ°æ©è½ãªã©ãåãä¸ãã¾ããã
"ãããã"ã¨è¨ãã®ã¯ãWLSã®ã¯ã©ã¹ãã¼ã¿å ±ææ©è½ã«ã¤ãã¦ã¯ãä»ã®ã¨ããå ¬å¼ããã¥ã¡ã³ãã«è¨è¼ããªãããã§ãã
ãã®ããæ£å¼ã«ã¯ãµãã¼ãããã¦ããããæ¬è¨äºã§è¨è¼ããå 容ã¯ãå°æ¥çã«äºåãªãå¤æ´ããããå»æ¢ãããå¯è½æ§ãããã¾ãã®ã§ã念ã®ããã注æã»ãäºæ¿ãã ããã
確èªããç°å¢ã¯æ¬¡ã®éãã§ãã
ã¯ã©ã¹ãã¼ã¿å ±æã¨ã¯
ã¯ã©ã¹ãã¼ã¿å
±æ(CDS)ã¯ãHotSpot JDKã®æ©è½*4ã¨ãã¦ãå®ã¯J2SE 5.0ã®é ããããã¾ãã
詳細ã¯ドキュメントã確èªããã ãããã®ã§ãããã¢ããªã±ã¼ã·ã§ã³ã®èµ·åæéãã¡ã¢ãªãããããªã³ããç縮ããããã«ãè¤æ°ã®JVMã§ã¯ã©ã¹ãã¼ã¿ãå©ç¨ã§ããããå
±æã¢ã¼ã«ã¤ããä½æã»å©ç¨ãã¾ãã
ãã ãé常ã®CDSã¯ãHotSpot Client VMãã¤ã·ãªã¢ã«ã¬ãã¼ã¸ã³ã¬ã¯ã¿ç°å¢ã§ã®ã¿ã®ãµãã¼ãããããã®ã§ãä»ã®æ代ã¨ãªã£ã¦ã¯å®è³ªçã«ä½¿ãããªãã§ãããã
Oracle JDK 8u40ã§ã¯ãã®CDSãæ¡å¼µãã¦ãå¤ãã®ã¢ããªã±ã¼ã·ã§ã³ç°å¢ã§å©ç¨ã§ããããã«ãåç¨æ©è½*5ã®ä¸ã¤ã¨ãã¦ãã¢ããªã±ã¼ã·ã§ã³ã¯ã©ã¹ãã¼ã¿å
±æ(AppCDS)ãå°å
¥ããã¾ãããツールドキュメントã«ã¯å®é¨çã¨è¨è¼ãããã®ã§ããã実際はそんなことはないããã§ãã
ä»åç´¹ä»ããWLSã®ã¯ã©ã¹ãã¼ã¿å
±æã¯ãå®éã«ã¯ãã¡ãã®AppCDSãå©ç¨ãããã¨ã«ãªãã¾ãã
WLSã§ã®AppCDSã®å©ç¨æ¹æ³
ããã§ã¯ãWLSã§AppCDSãå©ç¨ãã¦ã¿ã¾ãããã
ã¾ãã¯WLSãã¤ã³ã¹ãã¼ã«ãããã¡ã¤ã³ãä½æãã¦ãã ããã
ã¤ã³ã¹ãã¼ã«æé ããã¡ã¤ã³ä½ææé ã¯å²æãã¾ãã
ã¯ã©ã¹ãªã¹ãã®ä½æ
ã¿ã¼ããã«ãããã¡ã¤ã³ãã£ã¬ã¯ããªã«ç§»åããWLSãèµ·åããããã®ã¹ã¯ãªãã(startWebLogic.sh)ã«ãå¼æ°ãgenerateClassListããå ãã¦å®è¡ãã¾ãã
$ cd ~/weblogic/wls12212_dev/user_projects/domains/base_domain $ ./bin/startWebLogic.sh generateClassList
ããã¨ãé常ã®WLSèµ·åãªãã·ã§ã³ã«æ¬¡ã®JVMãªãã·ã§ã³ãå ãã£ã¦å®è¡ããã¾ãã(æ¹è¡ãå ¥ãã¦ãã¾ã)
-XX:+UnlockCommercialFeatures -XX:+IgnoreEmptyClassPaths -XX:DumpLoadedClassList=/Users/takahiro/weblogic/wls12212_dev/user_projects/domains/base_domain/WebLogic.classlist -XX:+UseAppCDS
WLSãRUNNINGã§èµ·åãããã¨ã確èªããããä¸æ¦Ctrl+Cãªã©ã§æ¢ãã¦ã¿ã¾ãããã
ãã¡ã¤ã³ãã£ã¬ã¯ããªç´ä¸ã«WebLogic.classlistãä½æããã¦ãããã¨ã確èªã§ãã¾ãã
$ ls -l total 1352 -rw-r----- 1 takahiro staff 671492 12 10 20:24 WebLogic.classlist drwxr-x--- 3 takahiro staff 102 12 7 01:01 autodeploy drwxr-x--- 20 takahiro staff 680 12 7 01:01 bin drwxr-x--- 3 takahiro staff 102 12 7 01:01 common drwxr-x--- 11 takahiro staff 374 12 7 01:01 config drwxr-x--- 3 takahiro staff 102 12 7 01:01 console-ext -rw-r----- 1 takahiro staff 438 12 10 20:24 derby.log -rw-r----- 1 takahiro staff 104 12 10 20:24 derbyShutdown.log -rw-r----- 1 takahiro staff 139 12 10 20:24 edit.lok -rw-r----- 1 takahiro staff 327 6 13 07:29 fileRealm.properties drwxr-x--- 14 takahiro staff 476 12 7 01:01 init-info drwxr-x--- 3 takahiro staff 102 12 7 01:01 lib drwxr-x--- 4 takahiro staff 136 12 7 01:01 nodemanager drwxr-x--- 3 takahiro staff 102 12 7 01:01 orchestration drwxr-x--- 7 takahiro staff 238 12 7 01:01 security drwxr-x--- 3 takahiro staff 102 12 7 01:01 servers -rwxr-x--- 1 takahiro staff 287 12 7 01:01 startWebLogic.sh
ä¸èº«ã¯ããã¹ãå½¢å¼ã§ããã¼ããããã¯ã©ã¹ãè¨é²ããã¦ãã¾ãã
大ããã®ã§ãæåã¨æå¾ã®10è¡ã ãè¦ã¦ã¿ã¾ãããã
$ head WebLogic.classlist java/lang/Object java/lang/String java/io/Serializable java/lang/Comparable java/lang/CharSequence java/lang/Class java/lang/reflect/GenericDeclaration java/lang/reflect/AnnotatedElement java/lang/reflect/Type java/lang/Cloneable
$ tail WebLogic.classlist weblogic/messaging/common/PrivilegedActionUtilities$4 weblogic/rmi/server/UnicastRemoteObject weblogic/rmi/server/RemoteServer weblogic/rmi/server/RemoteObject weblogic/messaging/dispatcher/DispatcherWrapperState weblogic/work/concurrent/services/PartitionConcurrrentManagedObjectFactory$1 weblogic/store/admin/JMXUtils$2 weblogic/store/io/file/StoreFile$1CloseChannels weblogic/store/admin/JMXUtils$4 weblogic/ldap/LDAPExecuteRequest
Java SEã®æ¨æºAPIãWLSã®ã¯ã©ã¹ããªã¹ãããã¦ããã®ãåããã¾ããã
å ±æã¢ã¼ã«ã¤ãã®ä½æ
次ã«åé ã§ä½æãããWebLogic.classlistã使ã£ã¦ãå ±æã¢ã¼ã«ã¤ããä½æããããã«generateArchive.shãå®è¡ãã¾ãã
$ ./bin/generateArchive.sh
å®éã«ã¯ã次ã®ãããªjavaã³ãã³ããå®è¡ããã¾ãã(æ¹è¡ãå ¥ãã¦ããã¾ã)
/Library/Java/JavaVirtualMachines/jdk1.8.0_112.jdk/Contents/Home/bin/java -XX:+UnlockCommercialFeatures -XX:+UnlockDiagnosticVMOptions -Xshare:dump -XX:+UseAppCDS -XX:+IgnoreEmptyClassPaths -XX:+TraceClassPaths -XX:+IgnoreUnverifiableClassesDuringDump -XX:SharedArchiveFile=/Users/takahiro/weblogic/wls12212_dev/user_projects/domains/base_domain/WebLogic.jsa -XX:SharedClassListFile=/Users/takahiro/weblogic/wls12212_dev/user_projects/domains/base_domain/WebLogic.classlist
ãã®ã³ãã³ãã®åºåã¯é常ã«å¤ããªããããæå¾ã®é¨åã®ã¿è¨è¼ãã¾ãã
Rewriting and linking classes: done Number of classes 15293 instance classes = 15279 obj array classes = 6 type array classes = 8 Calculating fingerprints ... done. Removing unshareable information ... done. Shared Lookup Cache Table Buckets = 8216 bytes Shared Lookup Cache Table Body = 617592 bytes ro space: 48183744 [ 40.5% of total] out of 122683392 bytes [39.3% used] at 0x0000000800000000 rw space: 62089888 [ 52.2% of total] out of 157286400 bytes [39.5% used] at 0x0000000807500000 md space: 8538968 [ 7.2% of total] out of 28311552 bytes [30.2% used] at 0x0000000810b00000 mc space: 34053 [ 0.0% of total] out of 6291456 bytes [ 0.5% used] at 0x0000000812600000 total : 118846653 [100.0% of total] out of 314572800 bytes [37.8% used]
ããã¦ãå ±æã¢ã¼ã«ã¤ãã¨ãã¦WebLogic.jsaãä½æããããã¨ã確èªã§ãã¾ãã
$ ls -l total 233512 -rw-r----- 1 takahiro staff 671492 12 10 20:24 WebLogic.classlist -r--r----- 1 takahiro staff 118865920 12 10 20:24 WebLogic.jsa drwxr-x--- 3 takahiro staff 102 12 7 01:01 autodeploy drwxr-x--- 20 takahiro staff 680 12 7 01:01 bin drwxr-x--- 3 takahiro staff 102 12 7 01:01 common drwxr-x--- 11 takahiro staff 374 12 7 01:01 config drwxr-x--- 3 takahiro staff 102 12 7 01:01 console-ext -rw-r----- 1 takahiro staff 438 12 10 20:24 derby.log -rw-r----- 1 takahiro staff 104 12 10 20:24 derbyShutdown.log -rw-r----- 1 takahiro staff 139 12 10 20:24 edit.lok -rw-r----- 1 takahiro staff 327 6 13 07:29 fileRealm.properties drwxr-x--- 14 takahiro staff 476 12 7 01:01 init-info drwxr-x--- 3 takahiro staff 102 12 7 01:01 lib drwxr-x--- 4 takahiro staff 136 12 7 01:01 nodemanager drwxr-x--- 3 takahiro staff 102 12 7 01:01 orchestration drwxr-x--- 7 takahiro staff 238 12 7 01:01 security drwxr-x--- 3 takahiro staff 102 12 7 01:01 servers -rwxr-x--- 1 takahiro staff 287 12 7 01:01 startWebLogic.sh
å ±æã¢ã¼ã«ã¤ããå©ç¨ãã¦WLSãèµ·å
ã§ã¯ãä»ä¸ãã«åé
ã§ä½æãããWebLogic.jsaãå©ç¨ãã¦WLSãèµ·åãã¾ãããã
startWebLogic.shã®å¼æ°ã«ãuseArchiveããå ãã¾ãã
$ ./bin/startWebLogic.sh useArchive
ä»åº¦ã¯ãé常ã®WLSèµ·åãªãã·ã§ã³ã«æ¬¡ã®JVMãªãã·ã§ã³ãå ãã£ã¦å®è¡ããã¾ã*6ã(æ¹è¡ãå ¥ãã¦ãã¾ã)
-XX:+UnlockCommercialFeatures -Xshare:auto -XX:+UseAppCDS -XX:+IgnoreEmptyClassPaths -XX:SharedArchiveFile=/Users/takahiro/weblogic/wls12212_dev/user_projects/domains/base_domain/WebLogic.jsa -showversion
ããã§å ±æã¢ã¼ã«ã¤ããå©ç¨ã§ããããã«ãªã£ãã¯ãã§ãã
â¦ã¨æã£ãã®ã§ããã-verbose:classããä»å ãã¦ç¢ºèªããã¨ãå
±æã¢ã¼ã«ã¤ãã§ã¯ãªããé常ã®jarãã¡ã¤ã«ãããã¼ãããã¦ãã¾ãã
ä½ããããããã¯ããªã®ã§ãä¸è¨ã®ã-Xshare:autoããã-Xshare:onãã«ãªãããstartWebLogic.shãä¿®æ£ãã¦ããå®è¡ããã¨ã次ã®ã¨ã©ã¼ã§ç°å¸¸çµäºãã¾ããã
An error has occurred while processing the shared archive file. Tool agent requires sharing to be disabled. Error occurred during initialization of VM Unable to use shared archive.
ã¨ã¼ã¸ã§ã³ãå©ç¨æã¯å
±æã¢ã¼ã«ã¤ããç¡å¹ã«ããå¿
è¦ãããããã§ãããããã§æãåºãã¾ããã
WLS 12.2.1ã«ã¯åçãããã°ãããæ©è½ã追å ããã¦ãããããã©ã«ãã§èµ·åãªãã·ã§ã³ã«ã-javaagent:$WL_HOME/server/lib/debugpatch-agent.jarãã追å ããã¾ãã
æåã®ã¹ã©ã¤ãã®P18ã«è¨è¼ãã¦ãã¾ããããããç¡å¹ã«ãã¹ãstartWebLogic.shã®å¼æ°ã«ãdisableDebugPatchesãã追å ãã¦å®è¡ãã¦ã¿ã¾ãããã
$ ./bin/startWebLogic.sh useArchive disableDebugPatches
ã-verbose:classãã®åºåã確èªããã¨ã次ã®ããã«WLSé¢é£ã®ã¯ã©ã¹ãå ±æã¢ã¼ã«ã¤ãããèªã¿è¾¼ã¾ããããã«ãªãã¾ããï¼*7
[Loaded weblogic.Server from shared objects file by sun/misc/Launcher$AppClassLoader]
ããã§ãããã©ã¼ãã³ã¹ã¯è¯ããªã£ãã®ï¼
ãã·ã³ã¹ããã¯ãªã©ã«ã大ããä¾åããã§ããããããªã©ã¯ã«è£½åã¯ãã³ããã¼ã¯ãå
¬éãã¦ã¯ãããªãããªã·ã¼ã ã£ãã¯ããªã®ã§ã詳細ã¯è¨è¼ãã¾ããããä»åã®ç§ã®ç°å¢ã§ã¯ãWLSèµ·åæã®ããã©ã¼ãã³ã¹ã¯ããªãåä¸ãã¾ããã
ã¾ããä»åã¯WLS管çãµã¼ãã ãã§ç¢ºèªãã¾ãããã1ã¤ã®ãã¹ãã»ãã¡ã¤ã³å
ã§è¤æ°ã®WLSã¤ã³ã¹ã¿ã³ã¹ãèµ·åããéã«ã¯ãã¡ã¢ãªãããããªã³ããæ¹åããããã¨ãæå¾
ã§ãã¾ãã
ã¾ã¨ã
ããã§ã¯ã¾ã¨ãã§ãã
- WLS 12.2.1ã«ã¯ããã¥ã¡ã³ãæªè¨è¼ã§ãããã¢ããªã±ã¼ã·ã§ã³ã¯ã©ã¹ãã¼ã¿å ±æ(AppCDS)ãå©ç¨ããæ©è½ãçµã¿è¾¼ã¾ãã¦ãã¾ãã
- AppCDSãå©ç¨ããã¨ãWLSã®èµ·åããã©ã¼ãã³ã¹ã®æ¹åããã¡ã¢ãªãããããªã³ãã®åä¸ãæå¾ ã§ãã¾ãã
- æ£å¼ã«ãªãªã¼ã¹ãããéã«ã¯ãã©ã¤ã»ã³ã¹ã«æ³¨æãã¤ã¤æ¤è¨¼ãã¦å©ç¨ãã¾ãããã
*1:ãã«ãããã³ããªã©ã¯åç¨ã§ä½¿ãã«ã¯WLS Enterprise Editionããªãã·ã§ã³ã©ã¤ã»ã³ã¹ãå¿ è¦ã¨ãªããå人çã«ã¯åå¼·ä¼ã§ã¯åãä¸ãã«ããã®ã§çãã¾ããã
*2:10/19åå¼·ä¼ã®å¤éã«ã¡ããã©ãªãªã¼ã¹ããããããå ã®ã¹ã©ã¤ãã«ã¯å«ãããã¾ããã§ãããããã®ãããã»ããã¯åºæ¬çã«Bugä¿®æ£ãã¡ã¤ã³ã®ãããªã®ã§ãããã»ã©ç®ç«ã£ãæ°æ©è½ã¯è¦å½ããã¾ããã
*3:éçºç°å¢ç¨ã¨ãã¦ã®ã¿åä½ä¿è¨¼ããã¦ããããã§ãã
*4:åæ§ã®ã¯ã©ã¹å ±ææ©è½ã¯IBM JDKã§ãå®è£ ããã¦ãã¾ãã
*5:ã¤ã¾ãæ¬çªç°å¢ãªã©ã§å©ç¨ããã«ã¯ã©ã¤ã»ã³ã¹ãå¿ è¦ã§ãã
*6:ç´æ¥ã¯é¢ä¿ãªãã-showversionããå ¥ã£ã¦ã¾ãã
*7:ãã¡ããJava SEã®æ¨æºAPIãå ±æã¢ã¼ã«ã¤ãããèªã¿è¾¼ã¾ããããã«ãªãã¾ãã
WebLogic Server 12.2.1ã®ThreadLocal Clean Outæ©è½ãæ¤è¨¼ãã¦ã¿ã #javaee #jpoug
æ¬æ¥ã¯Java EE Advent Calendarã¨JPOUG Advent Calndarã®12æ¥ç®ã§ãã*1
WebLogic Server(以éãWLS) 12.2.1ã先日10/26にリリースããã¾ããã
ããã¯ã12c Release 2(12cR2)ã§ãããããã3å¹´ã¶ãã®ã¡ã¸ã£ã¼ãã¼ã¸ã§ã³ã¢ããã®ä½ç½®ä»ãã¨ãªã£ã¦ãã¾ãã
ç®çã¨ãªãæ°æ©è½ã¨ãã¦ã¯ä»¥ä¸ããããå
¬å¼ãããæ§ã
ãªæ
å ±ãé 次åºã¦ãã¦ãã¾ãã
ããã§ã¯ãç´°ããã§ããçãæã«æãå±ãæ°æ©è½ã¨ãã¦ãThreadLocal Clean Outãç´¹ä»ã»æ¤è¨¼ãã¦ã¿ã¾ãã
ThreadLocalã¨ã¯ã©ã¹ãã¼ããªã¼ã¯ã®ãããã
ã¾ããWLSã«éããJavaã¢ããªã±ã¼ã·ã§ã³ãµã¼ãå
¨è¬ã¨ãã¦ãThreadLocalå©ç¨æã®æ³¨æç¹ã一昨年のAdvent Calendarã«ã¦è¨äºãæ¸ãã¾ããã
åºæ¬çã«ã¯ThreadLocalã使ã£ãå ´åã¯ã確å®ã«ç ´æ£ããªãã¨ã¯ã©ã¹ãã¼ããªã¼ã¯ã®åå ã«ãªãã¾ãã*3
ã¾ããè¨äºã«ãå°ã
è¨è¼ãã¦ãã¾ããããå½æTomcatã§ã¯ThreadLocalã®èªååé¤ã«å¯¾å¿ãã¦ãããWLSã§ãåæ§ã®æ©è½ãããã¨ãããªã¨æã£ã¦ããã®ã§*4ãWLS 12.2.1ããã®æ°æ©è½ã¨ãã¦å®è£
ãããã®ã¯ããã®ã¨ãã®æè¦ãåæ ãããããã«ãæããå¬ããã¨ããã§ãã
ThreadLocalã使ã£ããµã³ãã«ã¢ããªã±ã¼ã·ã§ã³
ThreadLocalã¯ãã¬ã¼ã ã¯ã¼ã¯ãã©ã¤ãã©ãªå
ã§å©ç¨ããããã¨ãå¤ãã¨æ³å®ããããã®å ´åã¯ç¢ºå®ã«ç ´æ£ããããç ´æ£ã¡ã½ãããå¥éå¼ã³åºããããªã¬ã¤ãã©ã¤ã³ãããã§ãããã
ããã§ã¯ã¹ã¬ããã»ã¼ãã§ãªãã¦ãç¾å ´ã§ãã©ãã«ãèµ·ããããªä»£è¡¨æ ¼ã®ä¸ã¤*5ã§ããSimpleDateFormatã使ã£ãå®è£
ãèãã¦ã¿ã¾ãã
ãã¡ãããJDK 8ããã¯Date and Time APIã®DateTimeFormatterãç¨æããã¦ãããã¹ã¬ããã»ã¼ããªã®ã§ããã使ãã¹ãã§ãããããã¬ã¬ã·ã¼ã ã£ããå®æãªå®è£ ã§ããã¨èãã¦ãã ããã
ã·ããªãª
SimpleDateFormatãç¶æ¿ããã¯ã©ã¹ãå©ç¨ãã¦ããããã¹ã¬ããã»ã¼ãã§ã¯ãªãããã¹ãæã«åé¡ãçºè¦ãã*6ããã«ãThreadLocalã使ã£ãå®è£
ã«åãæ¿ããã¨ããã·ããªãªã§èãã¦ã¿ã¾ãããã
以ä¸ã®ãããªãµã³ãã«ã¨ãã¦ã¿ã¾ããã*7
public class CustomDateFormat extends SimpleDateFormat { public CustomDateFormat() { super("yyyy-MM-dd HH:mm:ss.SSS"); } }
@ApplicationScoped @Path("now") public class NowResource { private static final ThreadLocal<DateFormat> DF_LOCAL = ThreadLocal.withInitial(() -> new CustomDateFormat()); @GET @Produces(MediaType.TEXT_PLAIN) public String getText() { DateFormat df = DF_LOCAL.get(); System.out.printf("Thread: %s%n", Thread.currentThread().getName()); System.out.printf("this identity=0x%x%n", System.identityHashCode(this)); System.out.printf("DF_LOCAL identity=0x%x%n", System.identityHashCode(DF_LOCAL)); System.out.printf("df identity=0x%x%n", System.identityHashCode(df)); System.out.println(); return df.format(new Date()); } }
ãµã³ãã«ã¢ããªã±ã¼ã·ã§ã³ã®èæ ®ç¹ã»æ³¨æç¹
ããã»ã©æ¬è³ªã§ã¯ãªãã®ã§ãé£ã°ãã¦ããã ãã¦æ§ãã¾ãããã念ã®ãã以ä¸ã«ã¤ãã¦ããçæã»ãäºæ¿ãã ããã
- package/importæã¯ãããã§ã¯çç¥ãã¦ãã¾ãã
- SimpleDateFormatãç¶æ¿ããåç´ãªCustomDateFormatã¯ã©ã¹ãããã¦ä½æãã¦ãã¾ãããã¢ããªã±ã¼ã·ã§ã³å
ã§å
±éåããæ¥ä»æ¸å¼ã使ãããã£ãã·ããªãªã¨ãç解ãã ããã
- SimpleDateFormatã¯ããã¼ãã¹ãã©ããã¯ã©ã¹ãã¼ãã«ã¦é常ã¯ãã¼ããããããããã®ã¾ã¾ã§ã¯ThreadLocalã«å ¥ãã¦ãã¯ã©ã¹ãã¼ããªã¼ã¯ã¯çºçããªãã¯ãã§ãã
- CustomDateFormatã¯ãJavaã¢ããªã±ã¼ã·ã§ã³ãµã¼ããå®è£ ãã¦ããWebã¢ããªã±ã¼ã·ã§ã³ç¨ã®ã¯ã©ã¹ãã¼ã(WLSã§ã¯weblogic.utils.classloaders.ChangeAwareClassLoader)ã«ã¦ãã¼ããããã¯ã©ã¹ã¨ãã¦ãã¾ãã
- NowResourceã¯JAX-RSã®ãªã½ã¼ã¹ã¯ã©ã¹ã¨ãã¦ãããé½åº¦ã¤ã³ã¹ã¿ã³ã¹åãããå¿
è¦ããªããããCDIã®@ApplicationScopedãçµã¿åããã¦ãã¾ãã
- javax.ws.rs.core.Applicationãç¶æ¿ããã¯ã©ã¹ãå¿ è¦ã§ãããããã§ã¯çç¥ãã¦ãã¾ãã
- @ApplicationScopedã§ãããããThreadLocalã®å®£è¨ã¯staticã§ãªãã¦ãããã§ãããã¹ã¬ããã«ç´ä»ãã¦ç®¡çãããããstaticã§å®ç¾©ãããã¨ãæ¯è¼çå¤ããã¨æãã¾ãã
- JDK 8ããå°å ¥ãããThreadLocal.withInitialã使ã£ã¦å¾®å¦ã«ã©ã ãå¼ã使ã£ã¦ãã¾ãããããã»ã©æå³ã¯ããã¾ãããå¾è¿°ãã¾ãããå¾æ¥ããå©ç¨ãã¦ããã§ãããinitialValue()ããªã¼ãã¼ã©ã¤ããã¦ãããã§ãããã
- System.outã¯æ¬çªç¨ã¢ããªã±ã¼ã·ã§ã³ã§ã¯ä½¿ãã¹ãã§ã¯ãªãã§ãããããã¾ã§ãããã°ç®çã®æ¤è¨¼ç¨ã»ãµã³ãã«ã¨ãããã¨ã§ãç解ãã ããã
å®è¡ãã¦ã¿ã
ä¸è¨ã®ãµã³ãã«ã¢ããªã±ã¼ã·ã§ã³ãWLS 12.2.1ã«ãããã¤ããå®è¡ãã¦ã¿ã¾ãããã
ãã©ã¦ã¶ãä»»æã®HTTPã¯ã©ã¤ã¢ã³ãã§ãhttp://host:port/context-root/application-path/nowãã«ã¢ã¯ã»ã¹ãã¦ã¿ã¦ãã ããã*8
ä½åº¦ãå®è¡ããã¨ã以ä¸ã®ãããªå½¢ã§æ¨æºåºåã«åºåããã¾ããã
Thread: [ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)' this identity=0x52097801 DF_LOCAL identity=0x5bc771ce df identity=0x2f93ea4c Thread: [ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)' this identity=0x52097801 DF_LOCAL identity=0x5bc771ce df identity=0x7b243b31 Thread: [ACTIVE] ExecuteThread: '2' for queue: 'weblogic.kernel.Default (self-tuning)' this identity=0x52097801 DF_LOCAL identity=0x5bc771ce df identity=0x7b243b31 Thread: [ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)' this identity=0x52097801 DF_LOCAL identity=0x5bc771ce df identity=0x2f93ea4c
thisãDF_LOCALã¯ãå½ããåã§ããä½åº¦å®è¡ãã¦ããªãã¸ã§ã¯ãIDã«å¤åã¯ããã¾ããã
dfã®ã¨ããã«æ³¨ç®ããã¨ãWLSã®å®è¡ã¹ã¬ãã(ä¸è¨ã§ããã°ExecuteThread: '0'ã¨'2')ãã¨ã«ãªãã¸ã§ã¯ãIDãç°ãªãã®ã確èªã§ãã¾ãã
è¨ãæããã¨åãã¹ã¬ããã§ããã°ãCustomDateFormatãåå©ç¨ããã¦ããã®ãåããã¾ãã
- ExecuteThread: '0' â 0x2f93ea4c
- ExecuteThread: '2' â 0x5bc771ce
ããã§ãã§ãããã§ããï¼ã¨ãã訳ã«ã¯æ®å¿µãªããè¡ãã¾ããã
ThreadLocal#remove()ãå¼ã³åºãç®æããªããããåãããã¤ãããã¨ã§ãåºæ¬çã«ã¯ã©ã¹ãã¼ããªã¼ã¯ã«ã¤ãªããã¯ãã§ãã
EagerThreadLocalCleanupãæå¹ã«ãã
ããããæ¬é¡ã®ã¨ããã«å ¥ã£ã¦ããã¾ããããThreadLocal Clean Outのドキュメントã確èªããã¨ãKernelMBeanã«eagerThreadLocalCleanupå±æ§ãããããããæå¹åããã°æ©è½ãããã§ãã
To clean up stray ThreadLocal use by applications and third-party libraries, configure the eagerThreadLocalCleanup attribute in the KernelMBean. The eagerThreadLocalCleanup attribute specifies whether to clean up all ThreadLocal storage from self-tuning thread pools after they have finished processing each work request.
æ©éæå¹åãã¦ã¿ããã¨ããã§ããã管çã³ã³ã½ã¼ã«ã«ã¯ãããããè¨å®ã¯è¦å½ããã¾ããããããªã¨ãã¯WLST(WebLogic Scripting Tool)ã使ãã®ãå®ç³ã§ããWLSTã®ä½¿ãæ¹ã¯ããã§ã¯èª¬æãã¾ããã®ã§ãWLSåå¼·ä¼ã®è³æã使ってみよう WLSTããªã©ãåç §ãã¦ãã ããã
ã¾ããconnectã³ãã³ãã§æ¥ç¶ãã¦ãfindã³ãã³ãã§å±æ§ãã©ãã«å®ç¾©ããã¦ããããæ¢ãã¦ã¿ã¾ãããã
wls:/offline> connect('weblogic','welcome1') ã¦ã¼ã¶ã¼ID weblogicã§t3://localhost:7001ã«æ¥ç¶ãã¦ãã¾ã ... ãã¡ã¤ã³"base_domain"ã«å±ãã管çãµã¼ãã¼"AdminServer"ã«ããæ£å¸¸ã«æ¥ç¶ããã¾ãã è¦å: ãµã¼ãã¼ã¸ã®æ¥ç¶ã«å®å ¨ã§ãªããããã³ã«ã使ç¨ããã¾ããã éä¿¡ã»ãã¥ãªãã£ã確ä¿ããã«ã¯ããããã«SSLãã¼ãã¾ãã¯ç®¡çãã¼ãã使ç¨ããå¿ è¦ãããã¾ãã wls:/base_domain/serverConfig/> find('threadlocal') ãã¹ã¦ã®ç»é²æ¸MBeanã¤ã³ã¹ã¿ã³ã¹ã§"threadlocal"ãæ¤ç´¢ãã¦ãã¾ã... /Servers/AdminServer EagerThreadLocalCleanup false
ããã§ã¯AdminServerã«å®ç¾©ããã¦ãããã¨ãåããã¾ãããè¤æ°ã®WLSã¤ã³ã¹ã¿ã³ã¹ãããã°ãããããè¨å®ãããã¨ã«ãªãã¾ãã
ãªããããã¥ã¡ã³ãã§ã¯KernelMBeanã«eagerThreadLocalCleanupå±æ§ããããã¨ã«ãªã£ã¦ãã¾ãããåã
ã®WLSã¤ã³ã¹ã¿ã³ã¹ã¯ServerMBeanã¨ãã¦åç
§ã»è¨å®ãã¾ããããã¦ãServerMBeanã¯KernelMBeanãç¶æ¿ãã¦ãããã¨ããMBeanリファレンスãAPIドキュメントãããåããã¾ãã
ããã§ã¯EagerThreadLocalCleanupãæå¹åãã¦ã¿ã¾ããããè¨å®å¤æ´å¾ã«WLSã®åèµ·åãå¿ è¦ã¨ãªãã¾ãã
wls:/base_domain/serverConfig/> edit() wls:/base_domain/edit/> startEdit() ç·¨éã»ãã·ã§ã³ãéå§ãã¦ãã¾ã ... ç·¨éã»ãã·ã§ã³ãéå§ããã¾ãããå¤æ´ãå®äºããããå¿ ãä¿åãã¦ã¢ã¯ãã£ãåãã¦ãã ããã wls:/base_domain/edit/ !> cd('/Servers/AdminServer') wls:/base_domain/edit/Servers/AdminServer !> cmo.setEagerThreadLocalCleanup(true) wls:/base_domain/edit/Servers/AdminServer !> save() ãã¹ã¦ã®å¤æ´ãä¿åãã¦ãã¾ã ... ãã¹ã¦ã®å¤æ´ãæ£å¸¸ã«ä¿åããã¾ããã wls:/base_domain/edit/Servers/AdminServer !> validate() å¤æ´ãæ¤è¨¼ãã¦ãã¾ã ... å¤æ´ãæ£å¸¸ã«æ¤è¨¼ããã¾ãã wls:/base_domain/edit/Servers/AdminServer !> showChanges() ã¢ã¯ãã£ãåããã¦ããªããã¹ã¦ã®å¤æ´: å¤æ´ãããMBean: com.bea:Name=AdminServer,Type=Server å¼ã³åºãããæä½: modify å¤æ´ãããå±æ§: EagerThreadLocalCleanup å±æ§ã®å¤ãå¤: false å±æ§ã®æ°ããå¤: true ãµã¼ãã¼ã®åèµ·åãå¿ è¦: true wls:/base_domain/edit/Servers/AdminServer !> activate() ãã¹ã¦ã®å¤æ´ãã¢ã¯ãã£ãåãã¦ãã¾ãããã°ããæéããããå ´åãããã¾ã ... ã¢ã¯ãã£ãåãå®äºããã¨ããã®ç·¨éã»ãã·ã§ã³ã«é¢é£ä»ããããç·¨éããã¯ãéæ¾ããã¾ãã MBeanã§æ¬¡ã®éçå±æ§ãå¤æ´ãããããã serverã®åèµ·åãå¿ è¦ã§ãã å¤æ´ãããMBean: com.bea:Name=AdminServer,Type=Server å¤æ´ãããå±æ§: EagerThreadLocalCleanup ã¢ã¯ãã£ãåãå®äºãã¾ãã
å度å®è¡ãã¦ã¿ã
WLSã®åèµ·åãå®äºããããåã³ã¢ããªã±ã¼ã·ã§ã³ãä½åº¦ãå®è¡ãã¦ã¿ã¾ãããã
以ä¸ã®ãããªåºåã確èªã§ãã¾ãã
Thread: [ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)' this identity=0x142db2b2 DF_LOCAL identity=0x7b62b3d4 df identity=0x78301aea Thread: [ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)' this identity=0x142db2b2 DF_LOCAL identity=0x7b62b3d4 df identity=0x25cba42c Thread: [ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)' this identity=0x142db2b2 DF_LOCAL identity=0x7b62b3d4 df identity=0x58d69058 Thread: [ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)' this identity=0x142db2b2 DF_LOCAL identity=0x7b62b3d4 df identity=0x38578023
thisã¨DF_LOCALã¯ã(ãã¡ããå½ããåã§ãã)å
ã»ã©ã¨åæ§ã«ä½åº¦å®è¡ãã¦ããªãã¸ã§ã¯ãIDã«å¤åã¯ããã¾ããã
ããããdfã¯åãå®è¡ã¹ã¬ãã(ããã§ã¯ã"ExecuteThread: '0'")ã§ããæ¯åãªãã¸ã§ã¯ãIDãç°ãªã£ã¦ããããªã¯ã¨ã¹ãã®é½åº¦ãªãã¸ã§ã¯ããåä½æããã¦ãããã¤ã¾ãThreadLocalé åãç ´æ£ããã¦ãããã¨ã窺ãã¾ãã
çæã»ç ´æ£ã®åä½ã確èªãã
å
ã®ãµã³ãã«ã¢ããªã±ã¼ã·ã§ã³ã®ThreadLocal
private static final ThreadLocal<DateFormat> DF_LOCAL = new ThreadLocal<DateFormat>() { @Override protected DateFormat initialValue() { System.out.println("Initialized!"); return new CustomDateFormat(); } @Override public void remove() { super.remove(); System.out.println("Removed!!"); } };
ããã§ãã«ãã»ãããã¤ããå度ã¢ããªã±ã¼ã·ã§ã³ãä½åº¦ãå®è¡ããã¨ä»¥ä¸ã®ããã«ãªãã¾ããã
Initialized! Thread: [ACTIVE] ExecuteThread: '4' for queue: 'weblogic.kernel.Default (self-tuning)' this identity=0x4276fc09 DF_LOCAL identity=0x771e79d2 df identity=0x49683253 Initialized! Thread: [ACTIVE] ExecuteThread: '4' for queue: 'weblogic.kernel.Default (self-tuning)' this identity=0x4276fc09 DF_LOCAL identity=0x771e79d2 df identity=0x387e8df1 Initialized! Thread: [ACTIVE] ExecuteThread: '4' for queue: 'weblogic.kernel.Default (self-tuning)' this identity=0x4276fc09 DF_LOCAL identity=0x771e79d2 df identity=0x5c5ffe39 Initialized! Thread: [ACTIVE] ExecuteThread: '4' for queue: 'weblogic.kernel.Default (self-tuning)' this identity=0x4276fc09 DF_LOCAL identity=0x771e79d2 df identity=0x43972404
ãã®çµæãããinitialValue()ã¯ãªã¯ã¨ã¹ãã®é½åº¦å¼ã°ãã¦ãããããåä½æããã¦ãããã¨ã¯åããã¾ãããremove()ã«ããæ示çãªç ´æ£ãè¡ããã¦ãã¾ããã
WLSã¯ãªã¼ãã³ã½ã¼ã¹ã§ã¯ãªããããã©ã®ãããªå®è£
ã¨ãªã£ã¦ãããåããã¾ããããEagerThreadLocalCleanupå±æ§ãæå¹åãã¦ããThreadLocal#remove()ãå¼ã³ã ãã®ã§ã¯ãªããå¥ã®æ¹æ³ã使ã£ã¦å®è¡ã¹ã¬ããã®ThreadLocalé åãç ´æ£ãã¦ããããã§ãã
remove()ãå¼ã°ããªãã¦ãã以åã«ThreadLocalã«ç´ä»ãã¦ãããªãã¸ã§ã¯ãã¯åç
§ããå¤ããé常ã¯GC対象ã¨ãªããããåé¡ã«ãªãã±ã¼ã¹ã¯å°ãªãã§ãããã
ThreadLocalã«å¤é¨ãªã½ã¼ã¹ã管çããã¯ã©ã¹*10ãç´ã¥ããããªå®è£
ããã¦ããå ´åã¯ã注æãå¿
è¦ããããã¾ããããã£ã¨ãããã®å ´åã¯èªååé¤ã«é ¼ãã®ã§ã¯ãªããã¢ããªã±ã¼ã·ã§ã³ã§æ示çã«ThreadLocal#remove()ãå¼ã°ãªãã¨ããªã½ã¼ã¹ãæ¯æ¸ãã¦åé¡ã«ãªãã±ã¼ã¹ãå¤ãã¯ãã§ãã
èå¯ãã¦ã¿ã
ä¸è¨ã¾ã§ã®åä½ãããEagerThreadLocalCleanupã®è¨å®ã常ã«æå¹ã«ããã»ããããã®ã§ããããï¼
ä»åã®ãµã³ãã«ã¢ããªã±ã¼ã·ã§ã³ã®ä¾ã§ã¯ãDateFormatãªãã¸ã§ã¯ãããã£ãã·ã¥ãã¦å¹ççã«æ±ãããã«ThreadLocalã«ç´ä»ãã¦ãã¾ããããªã¯ã¨ã¹ãã®é½åº¦ããªãã¸ã§ã¯ããåçæããã¦ãã¾ãã®ã§ã¯ãThreadLocalãå©ç¨ãã¦ã¹ã¬ããã»ã¼ãã«æ±ãããã工夫ããæå³ããªããªã£ã¦ãã¾ãã¾ãã
ã¨ã¯ãããã¤ã³ãã©è¦³ç¹ã§ã¯ãåãããã¤æã«ã¯ã©ã¹ãã¼ããªã¼ã¯ãçºçãã¦ãã¾ã£ã¦ã¯ãé·æéå®å®çã«éç¨ã§ãããåèµ·åã«ããéç¨ã®è² è·ãä¸ãã£ã¦ãã¾ãã®ã§ã¯ãªããâ¦â¦
ãå®å¿ãã ãããWLS 12.2.1ã®ThreadLocal Clean Outのドキュメントã«ã¯ç¶ããããã¾ãã
By default, the eagerThreadLocalCleanup attribute is set to false, in which the self-tuning thread pool only cleans up ThreadLocal storage when a thread returns to a standby pool and after an application is undeployed.
Setting the eagerThreadLocalCleanup attribute to true ensures that all thread pool threads have no leftover ThreadLocal values from previous requests when running work for a new request. However, overhead occurs from cleaning up ThreadLocal storage after each work request and then reestablishing ThreadLocal values for each new request. Since some applications cache objects that are expensive to create in the ThreadLocal storage, cleaning up ThreadLocal values after each request may negatively impact performance on those applications.
ã¤ã¾ããEagerThreadLocalCleanupãããã©ã«ãã®ç¡å¹ã®ã¾ã¾ã§ãã£ã¦ããã¢ã³ãããã¤å¾ã«ã¯ThreadLocalé åã¯ç ´æ£ãããã¨ã®ãã¨ã§ãã
ã¾ããEagerThreadLocalCleanupãæå¹ã«ãã¦ããã¨ããªã¯ã¨ã¹ãã®é½åº¦ã«ThreadLocalé åãç ´æ£ãããã®ã§ãã¢ããªã±ã¼ã·ã§ã³ã«ãã£ã¦ã¯ããã©ã¼ãã³ã¹ã«æªå½±é¿ãä¸ããå¯è½æ§ã«ã¤ãã¦ãè¨åããã¦ãã¾ãã
ã¯ã©ã¹ãã¼ããªã¼ã¯ãæ¤è¨¼ãã¦ã¿ã
ã§ã¯ã念ã®ãããåãã¢ããªã±ã¼ã·ã§ã³ãWLS 12.1.3/WLS 12.2.1ã§ä½åº¦ãåãããã¤ã»å®è¡ãã¦ããã¼ããã³ããè¦ã¦ã¿ã¾ããããããã§ã¯VisualVMã使ã£ã¦ã¿ããã¨ã«ãã¾ãã*11
ããå°ãè£è¶³
Tomcatã®ThreadLocalèªååé¤æ©è½ã¯ãアンデプロイ時にスレッドプールを破棄するã¨ãããåã°åæçãªå®è£
ã«ãè¦åãããã¾ãã
ããã¨æ¯è¼ãã¦ãWLS 12.2.1ã®ThreadLocal Clean Outã¯ããã®è¨äºãæ¸ãã«ããã£ã¦èª¿ã¹ã¦ã¿ãéãã§ã¯ãã³ã¢æ©è½ã§ããå®è¡ã¹ã¬ãããã¼ã«ãæ´»ãããã¾ã¾ãThreadLocalé åãç ´æ£ãã¦ãããã®ã§ãããªãå®éç¨ã«èããããæãããã¾ãã
ãã ããã¯ã©ã¹ãã¼ããªã¼ã¯ã¯ThreadLocalã ããåå ã§ã¯ããã¾ããã
JDK 8以éã§ã¯Permanenté åããªããªãã代ããã«ãã¤ãã£ãé åã«Metaspaceã¨ãã¦ç¢ºä¿ããããã¨ã«ãªãã¾ããããããã©ã«ãã§ã¯Metaspaceã®æ大ãµã¤ãºã¯ãã»ã¼ç¡å¶éã¨ãªã£ã¦ãã¾ãã*12
ThreadLocal以å¤ã®ãªã¼ã¯ãèãããã¾ãã®ã§ãéç¨æã¯Metaspaceの領域を監視ãããã-XX:MaxMetaspaceSizeãªãã·ã§ã³ãå©ç¨ãã¦ãMetaspaceé åã®ãµã¤ãºãå¶éããã»ãããããã»ã¹ã®è¥å¤§åé²æ¢ã«ã¤ãªããã®ã§å®å
¨ã§ãããã
ã¾ã¨ã
ããã§ã¯ãã¾ã¨ãã§ãã
- WLS 12.2.1ã¯ThreadLocal Clean Outæ©è½ããããã¢ããªã±ã¼ã·ã§ã³ã§ThreadLocalãç ´æ£ãå¿ãã¦ããã¯ã©ã¹ãã¼ããªã¼ã¯ãçºçããå¯è½æ§ãä½ããªãã¾ããã
- ãã®æ©è½ã¯ã»ã¨ãã©ã®å ´åãæå¹ã«åä½ããã¯ãã§ãããããã«é ¼ããã¨ãªããThreadLocal#remove()ãæ示çã«å¼ã³åºããæ¹ãå®å ¨ã§ãããã
- ThreadLocal以å¤ãåå ã§ãã¯ã©ã¹ãã¼ããªã¼ã¯ãçºçããå¯è½æ§ã¯ããã¾ãã®ã§ãPermanent/Metaspaceé åã®ãµã¤ãºãç£è¦ã»å¶éãããã¨ãæ¤è¨ãã¾ãããã
*1:ã©ã¡ãã被ãã¦ãã¾ãã¾ãããã許ããã ããâ¦
*2:åãªãªã¼ã¹ã§ããWLS 12.1.3ã§ãé¨åçã«Java EE 7ã«å¯¾å¿ãã¦ãã¾ãã
*3:ãã®å¾ã«ãid:n_agetsumaããã«ãã記事ã第十回 #渋谷javaでの資料ãåºã¦ãé常ã«åãããããã§ã
*4:ããã¯ããã§id:nekopããããツッコミが入ったりしていた
*5:ã¹ã¬ããã»ã¼ãã§ãªãã¦ç¾å ´ã§ãã©ãã«ãçºçããä»£è¡¨æ ¼ã®æ¬ä¸¸ã¯java.util.HashMapã§ãããâ¦
*6:å®éã«ç§ãåããããªãã¨ãããããããã¨ãããã¾ãâ¦
*7:ç¡çç¢çæãããã®ã§ãããµã«ãªæãã©ããæºè¼ã ã¨æãã¾ããâ¦
*8:RESTful APIã¨ãã¦ã¯ãç¾å¨ã®æ¥æãè¿ãã ãã§ãã®ã§ãç¹ã«é¢ç½ãã¨ããã¯ããã¾ããâ¦
*9:æ¬è³ªã«é¢ä¿ãªãã®ã§ãããå¿åå é¨ã¯ã©ã¹ã ã¨ãã¤ã¤ã¢ã³ãæ¼ç®åã使ããªãã®ãä»æ´ç¥ãã¾ããâ¦
*10:ãã¡ã¤ã«ãDBã³ãã¯ã·ã§ã³ãªã©ãä¸è¬çã«æ示çãªclose()ã«ããç ´æ£ãããªãã¨ãªã½ã¼ã¹ãªã¼ã¯ãçºçãã
*11:å ã«ç´¹ä»ããn_agetsumaさんの記事ã§ã¯Eclipse Memory Analyzer(MAT)ã使ã£ã¦ããããã¡ãã®ã»ãã詳細ãªåæã¯ã§ããã¨æãã¾ã
*12:ãã®è¾ºãã®è©³ç´°ã¯ã末永さんの資料ãããJava8のHotSpotVMからPermanent領域が消えた理由とその影響ãã®è¨äºãåèã«ãªãã¾ã
WebLogic Serverã®Exalogicæé©åæ©è½ã調ã¹ã¦ã¿ã #JPOUG
ãã®è¨äºã¯JPOUG Advent Calendarã®23æ¥ç®ã§ãã
æè¿ã®Oracle OpenWorldã§ã¯æ¯å¹´ã¢ãã©ã¤ã¢ã³ã¹è£½å*1ãçºè¡¨ããã¦ãã訳ã§ãã
ãã®ä¸ã§ããã«ã¦ã§ã¢ã«ç¹åãã製åã¨ãã¦ã¯ãOracle Exalogic Elasitic Cloud(以éãåºæ¬çã«Exalogicã¨ç¥)ãæ°å¹´åã«çºè¡¨ããã¾ããã
ãã®è¨äºã§ã¯WebLogic Server(以éãåºæ¬çã«WLSã¨ç¥)ã®Exalogicæé©åæ©è½ã«ã¤ãã¦èª¿ã¹ã¦ã¿ã¾ãããã*2
å½ç¶ãªãããé常ã®WLSã§ã¯å©ç¨ã§ãããExalogicã®ãã¼ãã¦ã§ã¢ããã³ã½ããã¦ã§ã¢ã©ã¤ã»ã³ã¹ã§å©ç¨ã§ããæ©è½ã§ã¯ããã®ã§ãããWLSã®ãã¥ã¼ãã³ã°ã®æ¹åæ§ã«ã¤ãã¦ãä½ããããã³ããå¾ãããããããã¾ããã
ãã¹ã¿ã¼ã¹ã¤ãã
å½ç¶æå ã«Exalogicããã訳ã¯ãªãã®ã§ãæ¬ä¼¼çã«ä»¥ä¸ã®ç°å¢ã§è¦ã¦ã¿ããã¨æãã¾ãã
ãã¦ãWLSã«ã¯Exalogicç¨ã®ããããâãã¹ã¿ã¼ã¹ã¤ããâã¨å¼ã°ããè¨å®ãããã¾ãã
- {ãã¡ã¤ã³}âæ§æâä¸è¬âExalogicæé©åã®æå¹å
ãã®è¨å®ãOnã«ãã¦ãåèµ·åãããã¨ã§ãWLSã®Exalogicæé©åæ©è½ãæå¹åãããã®ã§ãããå®éã«ã¯ã©ã®ãããªæ©è½ãããã®ã§ãããã
WLSã®æ¬çªã¢ã¼ãã ã¨ã管çã³ã³ã½ã¼ã«å·¦ä¸ã®ãã§ã³ã¸ã»ã³ã¿ã¼ããã[å¤æ´ã¨åèµ·åã®è¡¨ç¤º]ã«ã¦ãå¤æ´ãããå
容ãäºåã«ç¢ºèªãããã¨ãã§ãã¾ãã
MBeanã¬ãã«ã§æ§ã
ãªè¨å®ãæå¹ã«ãªããã¨ãåããã¾ããã
ä½è«ãå«ã¿ã¾ãããéç¨æã«[å¤æ´ã®ã¢ã¯ãã£ãå]ãããåã«ã¯ãå¿
ã[å¤æ´ã¨åèµ·åã®è¡¨ç¤º]ã«ã¦ãæå³ããè¨å®ã®ã¿åæ ããã(éã«è¨ãã¨ãæå³ããªãè¨å®ãåæ ãããªã)ãã¨ã確èªããæ¹ãããã§ãã
WLST(WebLogic Scripting Tool)ã§ããã°ãç·¨éä¸ã« showChanges() ãå®è¡ãããã¨ã§åæ§ã®æ
å ±ã確èªã§ãã¾ãã
wls:/wls1213-exalogic/edit !> showChanges() All changes that are made but not yet activated are: MBean Changed : com.bea:Name=wls1213-exalogic,Type=Domain Operation Invoked : modify Attribute Modified : ExalogicOptimizationsEnabled Attributes Old Value : false Attributes New Value : true Server Restart Required : true MBean Changed : com.bea:Name=Cluster-0,Type=Cluster Operation Invoked : modify Attribute Modified : SessionLazyDeserializationEnabled Attributes Old Value : false Attributes New Value : true Server Restart Required : true MBean Changed : com.bea:Name=AdminServer,Type=Server Operation Invoked : modify Attribute Modified : MuxerClass Attributes Old Value : weblogic.socket.NIOSocketMuxer Attributes New Value : weblogic.socket.NIOSharedWorkSocketMuxer Server Restart Required : true MBean Changed : com.bea:Name=AdminServer,Type=Server Operation Invoked : modify Attribute Modified : AddWorkManagerThreadsByCpuCount Attributes Old Value : false Attributes New Value : true Server Restart Required : true MBean Changed : com.bea:Name=AdminServer,Type=Server Operation Invoked : modify Attribute Modified : GatheredWritesEnabled Attributes Old Value : false Attributes New Value : true Server Restart Required : true MBean Changed : com.bea:Name=AdminServer,Type=Server Operation Invoked : modify Attribute Modified : ScatteredReadsEnabled Attributes Old Value : false Attributes New Value : true Server Restart Required : true MBean Changed : com.bea:Name=AdminServer,Type=Server Operation Invoked : modify Attribute Modified : UseConcurrentQueueForRequestManager Attributes Old Value : false Attributes New Value : true Server Restart Required : true MBean Changed : com.bea:Name=AdminServer,Type=TransactionLogJDBCStore,Server=AdminServer Operation Invoked : modify Attribute Modified : OraclePiggybackCommitEnabled Attributes Old Value : false Attributes New Value : true Server Restart Required : true (以éã管ç対象ãµã¼ãã¼åãåæ§ãªã®ã§çç¥)
ã¡ãã£ã¨ã¾ã¨ãã¦ã¿ã¾ãããã以ä¸ã®ãããªè¨å®ãããã¾ãã
Type | Attribute | Value |
---|---|---|
Domain | ExalogicOptimizationsEnabled | true |
Cluster | SessionLazyDeserializationEnabled | true |
Server | MuxerClass | weblogic.socket.NIOSharedWorkSocketMuxer |
Server | AddWorkManagerThreadsByCpuCount | true |
Server | GatheredWritesEnabled | true |
Server | ScatteredReadsEnabled | true |
Server | UseConcurrentQueueForRequestManager | true |
TransactionLogJDBCStore | OraclePiggybackCommitEnabled | true |
ãããã®è¨å®ã®è©³ç´°ã¯ããã¥ã¡ã³ãã§ç¢ºèªãããã¨ãã§ãã¾ãã
- WebLogic Server Domain Optimizations for Exalogic Elastic Cloud Software
- The WebLogic Server MBean Reference
- Licensing Information - Oracle WebLogic Server Optimizations for Exalogic Elastic Cloud Software
ãªãã{WLSãã¡ã¤ã³}/config/config.xmlã確èªããã¨ãâãã¹ã¿ã¼ã¹ã¤ããâã§ããExalogicOptimizationsEnabledã«ã¤ãã¦ã¯åæ ããã¾ãããä»ã®é ç®ã«ã¤ãã¦ã¯ç´æ¥åæ ããã¦ããªããã¨ãåããã¾ãã
<exalogic-optimizations-enabled>true</exalogic-optimizations-enabled>
åå¥ã®è¨å®ã«é¢ãã¦ã¯ãå¿
è¦ã«å¿ãã¦ãªã¼ãã¼ã©ã¤ãã§ãããã®æç¹ã§config.xmlã«ãåæ ããã¾ãã
ä¾ãã°SessionLazyDeserializationEnabledã¯ãHTTPã»ãã·ã§ã³ã®é
延ãã·ãªã¢ã©ã¤ãºãæå¹ã«ãããã¨ã§ãã¬ããªã±ã¼ã·ã§ã³æã®ã¡ã¢ãªå©ç¨ãå¹çåã§ããããã§ãããããããããã©ã¼ãã³ã¹ã¨ãã¦ã¯ç¡å¹åãã¦ãããæ¹ãããã±ã¼ã¹ãèãããã¾ãã
åä½ã®ç¢ºèª
å°ãã ãå®éã®åä½ãã©ããªã£ã¦ããã確èªãã¦ã¿ã¾ãããã
前回の記事と同様にスレッドダンプから見るãã¨ã«ãã¾ãã
"ExecuteThread: '3' for queue: 'weblogic.socket.Muxer'" #40 daemon prio=5 os_prio=31 tid=0x00007ff1cb684000 nid=0x7103 runnable [0x000000011eb26000] java.lang.Thread.State: RUNNABLE at sun.nio.ch.KQueueArrayWrapper.kevent0(Native Method) at sun.nio.ch.KQueueArrayWrapper.poll(KQueueArrayWrapper.java:198) at sun.nio.ch.KQueueSelectorImpl.doSelect(KQueueSelectorImpl.java:103) at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86) - locked <0x00000007a1b0aed0> (a sun.nio.ch.Util$2) - locked <0x00000007a1b0aec0> (a java.util.Collections$UnmodifiableSet) - locked <0x00000007a1b0ad90> (a sun.nio.ch.KQueueSelectorImpl) at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97) at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:101) at weblogic.socket.NIOSocketMuxer.selectFrom(NIOSocketMuxer.java:529) at weblogic.socket.NIOSharedWorkSocketMuxer.processSockets(NIOSharedWorkSocketMuxer.java:92) at weblogic.socket.SocketReaderRequest.run(SocketReaderRequest.java:30) at weblogic.socket.SocketReaderRequest.execute(SocketReaderRequest.java:43) at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:147) at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:119)
NIOSharedWorkSocketMuxer ã使ããã¦ãããã¨ãåããã¾ããã
ã¾ãã以ä¸ã®ãããªã¹ã¬ããã確èªã§ãã¾ãã
"RequestManagerPoller" #20 daemon prio=10 os_prio=31 tid=0x00007ff1c8cd2000 nid=0x3507 waiting on condition [0x000000011cc38000] java.lang.Thread.State: WAITING (parking) at sun.misc.Unsafe.park(Native Method) at java.util.concurrent.locks.LockSupport.park(LockSupport.java:304) at weblogic.utils.collections.Turnstile.awaitOn(Turnstile.java:79) at weblogic.utils.collections.Turnstile.await(Turnstile.java:100) at weblogic.utils.collections.Turnstile.spinAwait(Turnstile.java:93) at weblogic.utils.collections.PartialOrderSet$WindowedArrayQ.dequeue(PartialOrderSet.java:757) at weblogic.utils.collections.PartialOrderSet.take(PartialOrderSet.java:671) at weblogic.work.RequestManager$BufferQueueDrainer.run(RequestManager.java:1336) at java.lang.Thread.run(Thread.java:745)
ããã¯UseConcurrentQueueForRequestManagerã®è¨å®ã«ãã£ã¦åæ ãããããã§ãã
ä»ã«ãè¦ã¦è¡ãããã¨ããã§ãããå®æ©ã§ããã©ã¼ãã³ã¹å«ã確èªããªãã¨æå³ãªããã®ãããã¾ãããé·ããªããããã®ã§ãã®è¾ºãã«ãã¦ããã¾ãããã*4
ä»ã®Exalogicæé©åæ©è½
å æ¥ã12/18にWebLogic Server勉強会で発表した資料ã§å°ãã ã触ãã¦ããã®ã§ãããWLS 12.1.3ã§ã¯ä»¥ä¸ã®æ©è½ãExalogicç¨ã«è¿½å ããã¦ãã¦ãèµ·åã»åæ¢ã¹ã¯ãªãããããã®ä¸ç«¯ãå£éè¦ããã¨ãã§ãã¾ãã
ã¾ã¨ã
- WLSã®Exalogicæé©åæ©è½ã¯ãå¿ ãããExalogicç°å¢ã§ãªãã¦ãæ¬ä¼¼çã«ç¢ºèªã§ãããã®ãããã¾ãã*5
- ä¸è¶³æ©ãã§ãããã¡ãªã¼ã¯ãªã¹ãã¹ï¼ã¨ã¯è¨ãããµã³ã¿ãããèªå® ã«Exalogicã¯è¦ãã¾ãããé»æºãå¹ã£é£ã³ã¾ããã¨ãããåºãæãã¾ãã
*1:æ£ç¢ºã«ã¯Oracle Engineered Systemsã¨å¼ã¶ã
*2:ç´°ããã§ããééãããããã¨ã¨ãã¦ãWeb"L"ogicã¨Exa"l"ogicã§ã大æåå°æåãç°ãªãã¾ãï¼
*3:WLS 12.1.3ã¯Oracle JDK 8u20以éã§åä½ä¿è¨¼ãã¦ãã¾ãããFork/Join Frameworkããã©ã¬ã«ã¹ããªã¼ã ã¯ãµãã¼ããã¦ãã¾ãããã¾ããMac OS X 10.10ã¯è¨äºå·çæç¹ã§ã¯æ£å¼åä½ä¿è¨¼ã¯ããã¦ãã¾ããã
*4:åã«ç²ããã ãã¨ãè¨ãâ¦
*5:ãã¡ããSDP(Socket Direct Protocol)ã®ããã«ãã¼ãã¦ã§ã¢ä¾å(InfiniBand)ã®ã¨ããã¯ãå®æ©ã§ãªãã¨å³ããã§ãã