paulwong

          #

          5 ways to customize Spring MVC JSON/XML output

          https://mostafa-asg.github.io/post/customize-json-xml-spring-mvc-output/

          posted @ 2020-03-08 15:55 paulwong 閱讀(278) | 評論 (0)編輯 收藏

          MongDB連接池參數serverSelectionTimeout、connectTimeout、maxWaitTime和socketTimeout介紹

          MongDB Client請求查詢數據,需要包括五個階段:
          MongoDB Client需要找到可用的MongoDB Server
          MongoDB Client需要和MongoDB Server建立(new)Connection
          應用程序處理線程從Connection Pool中獲取Connection
          數據傳輸(獲取連接后,進行Socket通信,獲取數據)
          斷開Collection
          那么,MongoDB Client驅動設置中網絡相關等待超時參數serverSelectionTimeout、connectTimeout、maxWaitTime和socketTimeout分別對應上面哪個環節呢?
          參數serverSelectionTimeout:對應第1個環節,即MongoDB Client需要找到可用的MongoDB Server所需要的等待時間,                                             MongDB部署的生產一般由多個服務器組成,要么作為一個復制集或者作為一個分片集群,參數                                                     serverSelectionTimeout的值即為多長時間內找不到合適服務器時候就決定放棄的時間間隔;
          參數connectTimeout:對應第2個環節,每次創建Connection,對應的網絡等待。單位毫秒數, 0表示沒有限制;
          參數maxWaitTime:對應第3個環節,應用程序處理線程從連接池中獲取Collection,對應的網絡等待時間。單位毫秒數,0表示                                   不等待,負數表示等待時間不確定;
          參數socketTimeout:對應第4個環節,獲取Connection后,就有了Socket通信,獲取數據,即在MonogoDB Client                                                      和MonogoDB Server的Socket通信過程中的網絡等待時間。單位毫秒數,默認配置為0,也就是沒有限制,                                  沒有超 時限制,系統出了問題也不容易發現,應該根據實際情況,給出合理的超時時間。
           
          其他相關參數如下:
          connectionsPerHost:對mongo實例來說,每個host允許鏈接的最大鏈接數,這些鏈接空閑時會放入池中,如果鏈接被耗盡,任何請求鏈接的操作會被阻塞等待鏈接可用,推薦配置10
          minPoolsSize:當Connection空閑時,Connection Pool中最少Connection保有量;
          threadsAllowedToBlockForConnectionMultiplier:每個Connection的可以阻塞等待的線程隊列數,它以上面connectionsPerHost值相乘的結果就是阻塞等待的線程隊列最大值。如果連接線程排滿了隊列就會拋出“Out of semaphores to get db”錯誤。
          socketKeepAlive:該標志用于控制socket保持活動的功能,通過防火墻保持連接活著
          socketKeepAlive=false
          autoConnectRetry:這個控制是否在一個Connection時,系統會自動重試
          #true:假如Connection不能建立時,驅動將重試相同的server,有最大的重試次數,默認為15次,這樣可以避免一些server因為一些阻塞操作零時down而驅動拋出異常,這個對平滑過度到一個新的master,也是很有用的,注意:當集群為復制集時,驅動將在這段時間里,嘗試鏈接到舊的master上,而不會馬上鏈接到新master上
          #false 當在進行socket讀寫時,不會阻止異常拋出,驅動已經有自動重建破壞鏈接和重試讀操作. 推薦配置false
          autoConnectRetry=false
          #重新打開鏈接到相同server的最大毫秒數,推薦配置為0,如果 autoConnectRetry=true,表示時間為15s
          #com.jd.mongodbclient2.mongo.JDClientMongo.maxAutoConnectRetryTime=false
          #表示當沒有手動關閉游標時,是否有一個自動釋放游標對象的方法,如果你總是很小心的關閉游標,則可以將其設為false 推薦配置true

          https://docs.mongodb.com/manual/reference/connection-string/#connections-connection-options
          ————————————————
          版權聲明:本文為CSDN博主「pursuer211」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接及本聲明。
          原文鏈接:https://blog.csdn.net/pursuer211/article/details/82994027

          posted @ 2020-03-07 20:58 paulwong 閱讀(1315) | 評論 (0)編輯 收藏

          使用 Spring Batch 構建企業級批處理應用-2

               摘要: 前言在本系列文章的第 1 部分,我們搭建了一個用戶繳費通知的批處理任務。盡管這個簡單的應用展現了 Spring Batch 的基本功能,但是它與真實的應用相去甚遠。在實際應用中,我們的 Job 可能必須要包含多個 Step,為了提高性能,我們可能需要考慮 Job 的并發問題。Spring Batch 在這些方面又提供了哪些好的特性呢?讓我們繼續。Step Flow通過前文我們已經知道,Step 是...  閱讀全文

          posted @ 2020-03-06 13:47 paulwong 閱讀(284) | 評論 (0)編輯 收藏

          使用 Spring Batch 構建企業級批處理應用-1

               摘要: 引言總述本系列文章旨在通過示例搭建以及特性介紹,詳細講述如何利用 Spring Batch 開發企業批處理應用。本系列文章共分為三部分,第一部分初步介紹了批處理以及 Spring Batch 的相關概念,同時搭建了一個簡單的基于 Spring Batch 的批處理應用。第二部分介紹了 Step Flow 以及并發支持。第三部分則主要介紹了 Spring Batch 對任務監控的支持。下面讓我們進入...  閱讀全文

          posted @ 2020-03-06 13:45 paulwong 閱讀(415) | 評論 (0)編輯 收藏

          MobaXterm注冊版

          LINUX 的shell神器
          https://www.upload.ee/files/11132815/MobaXterm_Pro_Portable_SetuP_v20_fu11.rar.html

          posted @ 2020-02-27 17:44 paulwong 閱讀(514) | 評論 (0)編輯 收藏

          各種獲取JVM DUMP的方法

          JVM 的線程堆棧 dump 也稱 core dump,內容為文本,主要包含當時 JVM 的線程堆棧,堆 dump 也稱 heap dump,內容為二進制格式,主要包含當時 JVM 堆內存中的內容。由于各個操作系統、各個 JVM 實現不同,即使同一 JVM 實現,各個版本也有差異,本文描述的方法都基于 64 位 Linux 操作系統環境,Java 8 Oracle HotSpot JVM 實現。

          堆棧和堆的內容在定位問題的時候,都是非常重要的信息。線程堆棧 dump 可以了解當時 JVM 中所有線程的運行情況,比如線程的狀態和當前正在運行的代碼行。堆 dump 可以了解當時堆的使用情況,各個類實例的數量及各個實例所占用的空間大小。

          線程堆棧

          使用 jstack

          jstack 是 JDK 自帶的工具,用于 dump 指定進程 ID(PID)的 JVM 的線程堆棧信息。

          # 打印堆棧信息到標準輸出 jstack PID  
          # 打印堆棧信息到標準輸出,會打印關于鎖的信息 jstack -l PID  
          強制打印堆棧信息到標準輸出,如果使用 jstack PID 沒有響應的情況下(此時 JVM 進程可能掛起),
          加 -F 參數 jstack -F PID 

          使用 jcmd

          jcmd 是 JDK 自帶的工具,用于向 JVM 進程發送命令,根據命令的不同,可以代替或部分代替 jstack、jmap 等。可以發送命令 Thread.print 來打印出 JVM 的線程堆棧信息。

          # 下面的命令同等于 jstack PID 
          jcmd PID Thread.print  

          # 同等于 jstack -l PID 
          jcmd PID Thread.print -l 

          使用 kill -3

          kill 可以向特定的進程發送信號(SIGNAL),缺省情況是發送終止(TERM) 的信號 ,即 kill PID 與 kill -15 PID 或 kill -TERM PID 是等價的。JVM 進程會監聽 QUIT 信號(其值為 3),當收到這個信號時,會打印出當時的線程堆棧和堆內存使用概要,相比 jstack,此時多了堆內存的使用概要情況。但 jstack 可以指定 -l 參數,打印鎖的信息。

          kill -3 PID 
          # 或 kill -QUIT PID 

          -XX:+HeapDumpOnOutOfMemoryError

          添加 JVM 參數 -XX:+HeapDumpOnOutOfMemoryError 后,當發生 OOM(OutOfMemory)時,自動堆 dump。缺省情況下,JVM 會創建一個名稱為 java_pidPID.hprof 的堆 dump 文件在 JVM 的工作目錄下。但可以使用參數 -XX:HeapDumpPath=PATH 來指定 dump 文件的保存位置。

          # JVM 發生 OOM 時,會自動在 /var/log/abc 目錄下產生堆 dump 文件 java_pidPID.hprof 
          java -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/log/abc/ 

          jmap

          jmap 也是 JDK 自帶的工具,主要用于獲取堆相關的信息。

          堆 dump

          # 將 JVM 的堆 dump 到指定文件,如果堆中對象較多,需要的時間會較長,子參數 format 只支持 b,
          即二進制格式
          jmap -dump:format=b,file=FILE_WITH_PATH

          # 如果 JVM 進程未響應命令,可以加上參數 -F 嘗試
          jmap -F -dump:format=b,file=FILE_WITH_PATH

          # 可以只 dump 堆中的存活對象,加上 live 子參數,但使用 -F 時不支持 live
          jmap -dump:live,format=b,file=FILE_WITH_PATH

          獲取堆概要信息

          # -heap 參數用于查看指定 JVM 進程的堆的信息,包括堆的各個參數的值,堆中新生代、年老代的內存大小、使用率等 
          jmap -heap PID  

          # 同樣,如果 JVM 進程未響應命令,可以加上參數 -F 嘗試 
          jmap -F -heap PID 

          一個實例輸出如下:

          Attaching to process ID 68322, please wait
          Debugger attached successfully.
          Server compiler detected.
          JVM version is 25.112-b16

          using thread-local object allocation.
          Parallel GC with 4 thread(s)

          Heap Configuration:
             MinHeapFreeRatio         = 0
             MaxHeapFreeRatio         = 100
             MaxHeapSize              = 268435456 (256.0MB)
             NewSize                  = 8388608 (8.0MB)
             MaxNewSize               = 89128960 (85.0MB)
             OldSize                  = 16777216 (16.0MB)
             NewRatio                 = 2
             SurvivorRatio            = 8
             MetaspaceSize            = 21807104 (20.796875MB)
             CompressedClassSpaceSize = 1073741824 (1024.0MB)
             MaxMetaspaceSize         = 17592186044415 MB
             G1HeapRegionSize         = 0 (0.0MB)

          Heap Usage:
          PS Young Generation
          Eden Space:
             capacity = 41943040 (40.0MB)
             used     = 1701504 (1.6226806640625MB)
             free     = 40241536 (38.3773193359375MB)
             4.05670166015625% used
          From Space:
             capacity = 4194304 (4.0MB)
             used     = 0 (0.0MB)
             free     = 4194304 (4.0MB)
             0.0% used
          To Space:
             capacity = 5242880 (5.0MB)
             used     = 0 (0.0MB)
             free     = 5242880 (5.0MB)
             0.0% used
          PS Old Generation
             capacity = 30408704 (29.0MB)
             used     = 12129856 (11.56793212890625MB)
             free     = 18278848 (17.43206787109375MB)
             39.889421134159484% used

          16658 interned Strings occupying 1428472 bytes.

          獲取堆中的類實例統計
          # 打印 JVM 堆中的類實例統計信息,以占用內存的大小排序,同樣,如果 JVM 未響應命令,也可以使用 -F 參數 
          jmap -histo PID  

          # 也可以只統計堆中的存活對象,加上 live 子參數,但使用 -F 時不支持 live 
          jmap -histo:live PID 

          使用 jcmd

          # 等同 jmap -dump:live,format=b,file=FILE_WITH_PATH
          jcmd PID GC.heap_dump FILE_WITH_PATH

          # 等同 jmap -dump:format=b,file=FILE_WITH_PATH
          jcmd PID GC.heap_dump -all FILE_WITH_PATH

          # 等同 jmap -histo:live PID
          jcmd PID GC.class_histogram

          # 等同 jmap -histo PID
          jcmd PID GC.class_histogram -all

          posted @ 2020-02-24 22:03 paulwong 閱讀(1253) | 評論 (0)編輯 收藏

          Mongodb shell中select in 的實現


          var bookIds = db.likes.find({userId:100}).map(function(like) { 
            return like.bookId; 
          });
          var books = db.books.find({_id:{$in:bookIds}});

          db.REPORT_ITEM.count({REQUEST_ID : db.BATCH_CONTROL.find({ FILE_NAME : "20200218_100000.file" }).map(function(like) { 
            return like._id; 
          })[0].str, JOB_TYPE_ENUM:"CHECK"})

          posted @ 2020-02-21 23:10 paulwong 閱讀(528) | 評論 (0)編輯 收藏

          采用 jstatd 監控服務器


          https://www.jianshu.com/p/97f09e1648a6

          posted @ 2020-02-21 17:08 paulwong 閱讀(344) | 評論 (0)編輯 收藏

          mongodb錯誤記錄

          https://blog.csdn.net/wangxiaotongfan/article/details/81560463


          posted @ 2020-02-21 08:50 paulwong 閱讀(284) | 評論 (0)編輯 收藏

          JAVA進程無故退出而沒有留下LOG?

          LINUX通常有個OOM KILLER進程,對于他認為吃內存的進程,會根據一定的算分,執行kill -9殺掉,查看日志如下:

          #less /tmp/messages
          Feb 20 03:55:09 ip kernel: Out of memory: Kill process 5974 (java) score 494 or sacrifice child
          Feb 20 03:55:09 ip kernel: Killed process 5974 (java), UID 1001, total-vm:23674020kB, anon-rss:17503912kB, file-rss:0kB, shmem-rss:0kB

          那如何屏蔽呢?

          #/etc/cron.d/oom_disable
          */1**** root pgrep -f "java" | while read PID;do echo -17 > /proc/$PID/oom_adj;done

          參考文檔:
          Linux內核OOM機制的詳細分析
          http://blog.chinaunix.net/uid-29242873-id-3942763.html


          posted @ 2020-02-20 15:57 paulwong 閱讀(906) | 評論 (0)編輯 收藏

          僅列出標題
          共115頁: First 上一頁 19 20 21 22 23 24 25 26 27 下一頁 Last 
          主站蜘蛛池模板: 屏东县| 长丰县| 万山特区| 宁波市| 稻城县| 东至县| 义马市| 新龙县| 东平县| 将乐县| 金沙县| 夹江县| 毕节市| 资中县| 化州市| 彭泽县| 新民市| 龙井市| 富源县| 兴文县| 修水县| 哈密市| 隆子县| 轮台县| 资源县| 安徽省| 兴仁县| 修武县| 米林县| 沛县| 河池市| 饶阳县| 枞阳县| 客服| 鸡东县| 荆门市| 迭部县| 辽源市| 上杭县| 沾化县| 宁国市|