[英]CPU usage of Java + JDBC
在負載下測試我的webapp時,我得到了Linux下的top
摘錄:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
3964 nobody 20 0 4965m 622m 6048 S 8.5 11.0 6:02.49 java
1985 mysql 20 0 294m 125m 3804 S 2.1 2.2 0:05.39 /usr/sbin/mysqld
我需要對java的%CPU
列進行解釋。 據我了解,在web請求期間, java
的一個線程正在執行一些純Java邏輯,消耗一些CPU時間(讓它為5ms)。 然后它通過JDBC連接到數據庫,發送一些sql查詢並等待,例如10ms ,以進行響應。 這些10ms顯然被計為/usr/sbin/mysqld
CPU使用率。 然后java
線程恢復它的操作並完成,消耗另外20ms並且總計執行時間為5 + 10 + 20 = 30ms。
而新手的問題是:難道你不認為這些與db相關的10ms被計算兩次:一次是java線程等待db處理查詢而第二次作為數據庫CPU使用本身? 我在這里不明白什么?
當進程只是在套接字上等待時,通常不會使用大量的CPU。 基本上,內核知道它處於等待狀態並且不會安排它運行 - 除了信號處理之類的小事情,例如可以用來定期運行垃圾收集器。
(好吧,如果要收集大量垃圾,那么“小東西”可能不會那么少。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.