AIX系统CPU监控与评估
AIX系統CPU監控與評估
一, VMSTAT命令(CPU)
1.1 cpu
1.2 kthr(內核等待)
1.3 faults故障
1.4 memory(內存)
1.5 page磁盤交換
二, iostat命令
三, Sar命令
3.1?實時采樣和顯示
3.2 sar –P(報告每個處理器的信息)
3.3 sar –c (系統調用率)
3.4 sar –q(運行隊列長度和交換隊列長度)
四, tprof監視進程的cpu使用
4.1?實時或在線方式
五, ps命令
5.1?顯示占用cpu最高的進程
六,?小結
?
AIX系統CPU監控與評估
中央處理器是系統最快的組件之一.?在某一個時間單位內對單個程序來說保持100%的CPU占用率(也就是說空閑0%,?等待0%)超過幾秒鐘是很少見的.?如果監視器長時間地顯示CPU占用率為100%,?則很有可能是某個程序陷入了死循環.?即使程序僅僅是占用較多資源而不是崩潰了,?也需要將他們識別出來并進行處理.
一, VMSTAT命令(CPU)
該命令可迅速提供關于各種系統資源和與之相關的性能問題的簡要信息.
Vmstat命令報告關于內核線程的統計信息,?包括處于運行和等待隊列中的,?內存中的,?頁面調度中的,?磁盤中的,?中斷,系統調用,?上下文切換和CPU活動的內核線程.?所報告的CPU活動是用戶方式,?系統方式,?空閑時間和等待磁盤IO的百分比細目分類.
作為一個cpu監視器, vmstat命令優于iostat命令,?因為vmstat命令是滾動的,?使得它的每一行報告的輸出更容易掃描.?并且如果有很多磁盤鏈接到系統中,?由此所涉及到的開銷更少.
# vmstat 2
?
System configuration: lcpu=8 mem=8192MB
?
kthr????memory??????????????page??????????????faults????????cpu???
----- ----------- ------------------------ ------------ -----------
?r??b???avm???fre??re??pi??po??fr???sr??cy??in???sy??cs us sy id wa
?0??0 1596212 186517???0???0???0???0????0???0 157 2242 757??5??0 95??0
?1??0 1602824 179905???0???0???0???0????0???0 276 8731 986 23??1 76??0
?1??0 1609397 173332???0???0???0???0????0???0 298 5696 1118 27??1 72??0
?1??0 1609407 173322???0???0???0???0????0???0 276 5630 1046 23??1 77??0
?1??0 1609593 173136???0???0???0???0????0???0 1209 10754 3699 10??3 87??0
?1??0 1609630 173099???0???0???0???0????0???0 637 8595 2061 26??1 72??0
?0??0 1596477 186252???0???0???0???0????0???0 330 3439 1200??8??1 91??0
?1??0 1603954 178775???0???0???0???0????0???0 227 8673 897 26??1 74??0
?1??0 1609455 173274???0???0???0???0????0???0 311 4853 1116 20??1 79??0
?2??0 1609444 173285???0???0???0???0????0???0 268 5253 1078 21??1 78??0
?1??1 1609464 173265???0???0???0???0????0???0 1038 8405 3346??8??3 89??1
?1??0 1609469 173260???0???0???0???0????0???0 533 6095 1857 22??1 77??0
?1??0 1596188 186541???0???0???0???0????0???0 201 28445 910 23??1 75??0
?1??0 1596187 186542???0???0???0???0????0???0 166 45170 767 24??1 75??0
?1??0 1596378 186351???0???0???0???0????0???0 127 60695 708 24??2 75??0
?1??0 1596190 186539???0???0???0???0????0???0 171 53852 808 24??2 75??0
?1??0 1596329 186400???0???0???0???0????0???0 704 5027 1856??4??1 95??0
?0??0 1596357 186372???0???0???0???0????0???0 841 6574 2227??3??1 96??0
最佳利用是讓CPU在100%的時間中工作.?這適用于單用戶系統的情況,?不需要共享CPU.?總的來說,?如果us+sy時間低于90%,?則不認為單用戶系統是CPU受限制的.?但是,?如果一個多用戶系統中us+sy時間超過80%,?則進程可能要花時間在運行隊列中等待.?響應時間和吞吐量會受損害.
要檢查CPU是否是瓶頸,?考慮vmstat報告中的四個cpu列和兩個kthr(內核線程)列.?查看故障列也是值得的.
1.1 cpu
在給定的時間間隔內使用cpu時間的百分比細分.
kthr????memory??????????????page??????????????faults????????cpu????
----- ----------- ------------------------ ------------ -----------
?r??b???avm???fre??re??pi??po??fr???sr??cy??in???sy??cs?us sy id wa
?0??0 1596212 186517???0???0???0???0????0???0 157 2242 757??5??0 95??0
?1??0 1602824 179905???0???0???0???0????0???0 276 8731 986?23??1 76??0
?1??0 1609397 173332???0???0???0???0????0???0 298 5696 1118?27??1 72??0
Us:
用戶方式下所花費的cpu時間百分比.?進程可以在用戶方式下執行,?也可以在系統(內核)方式下執行.?當在用戶方式下時,進程在它自己的應用程序代碼中執行,?不需要內核資源來進行計算,?管理內存或設置變量.
Sy:
系統方式下執行一個進程所花時間的百分比.?這包括內核進程(kernel procedures)和其他需要訪問內核資源的進程所消耗的cpu資源.
Id:
沒有未完成的磁盤io時cpu空閑或等待的時間百分比.?由ps命令(帶有-k或-g 0參數)生成的報告將它確定為kproc或wait.
Wa:
暫掛本地磁盤io和NFS加載的磁盤的cpu空閑百分比.?如果在cpu等待時至少有一個未完成的磁盤io,?該時間就歸為IO等待時間.?除非進程使用異常IO,?否則對磁盤的io請求會導致調用的進程阻塞,?知道請求完成為止.
超過25%的wa值可以表示磁盤子系統沒有被正確平衡,?或者這也可能是磁盤密集工作負載的結果.
1.2 kthr(內核等待)
在采樣時間間隔上對各種隊列中的內核線程數求的每秒平均值.
kthr????memory??????????????page??????????????faults????????cpu???
----- ----------- ------------------------ ------------ -----------
?r??b???avm???fre??re??pi??po??fr???sr??cy??in???sy??cs us sy id wa
?0??0?1596212 186517???0???0???0???0????0???0 157 2242 757??5??0 95??0
?1??0?1602824 179905???0???0???0???0????0???0 276 8731 986 23??1 76??0
?1??0?1609397 173332???0???0???0???0????0???0 298 5696 1118 27??1 72??0
?
R:
可運行的內核線程平均數,?包括正在運行的線程和正在等待cpu的線程,?如果這個數字大于cpu的數目,?至少有一個線程要等待cpu,?等待cpu的線程越多,?越有可能對性能產生影響.
B:
每秒在等待隊列中的內核線程數,?這包括正在等待文件系統io的線程或者由于內存裝入控制而暫掛的線程.
P:
對于vmstat –I,?是每秒等待原始設備IO的線程數目.?等待文件系統IO的線程不包括在這里.
1.3 faults故障
kthr????memory??????????????page??????????????faults????????cpu???
----- ----------- ------------------------ ------------ -----------
?r??b???avm???fre??re??pi??po??fr???sr??cy??in???sy??cs?us sy id wa
?0??0 1596212 186517???0???0???0???0????0???0?157 2242 757??5??0 95??0
?1??0 1602824 179905???0???0???0???0????0???0?276 8731 986?23??1 76??0
?
In:
每秒設備中斷數
Sy:
每秒系統調用次數.
Cs:
每秒鐘的上下文切換次數.?物理cpu資源細分為10毫秒的邏輯時間片,?假設一個線程調度被運行,?它將一直運行直到它的時間片用完,或被搶先,或者自愿放棄cpu控制權.?當給予另一個線程cpu控制權時,?必須保存前一個線程的上下文或工作環境,并且必須裝入當前線程的上下文.?操作系統有一個很有效的上下文切換過程,?所以每次切換并不耗資源.?任何上下文切換的顯著增加,?如當cs比磁盤io和網絡信息包速率高很多,?都應進行進一步調查.
1.4 memory(內存)
kthr????memory??????????????page??????????????faults????????cpu???
----- ----------- ------------------------ ------------ -----------
?r??b???avm???fre??re??pi??po??fr???sr??cy??in???sy??cs us sy id wa
?0??0 1596212 186517???0???0???0???0????0???0 157 2242 757??5??0 95??0
?1??0 1602824 179905???0???0???0???0????0???0 276 8731 986 23??1 76??0
?1??0 1609397 173332???0???0???0???0????0???0 298 5696 1118 27??1 72??0
Avm列表表示活動虛擬內存的頁面數,?每頁一般4KB
Fre表示空閑的頁面數.
1.5 page磁盤交換
kthr????memory??????????????page??????????????faults????????cpu???
----- ----------- ------------------------ ------------ -----------
?r??b???avm???fre??re??pi??po??fr???sr??cy??in???sy??cs us sy id wa
?0??0 1596212 186517???0???0???0???0????0???0 157 2242 757??5??0 95??0
?1??0 1602824 179905???0???0???0???0????0???0 276 8731 986 23??1 76??0
?1??0 1609397 173332???0???0???0???0????0???0 298 5696 1118 27??1 72??0
Re:?該列無效
Pi:?從磁盤交換到內存的交換頁(調頁空間)數量, 4KB/頁.?當進程訪問一個交換頁時就產生一個缺頁故障.
Po:?從內存交換到磁盤的交換頁數量, 4KB/頁.?如果寫入的交換頁在交換區間內不存在或者已經做了修改,?則寫入交換區間.如果不被再次訪問,?則會留在調度空間中直到進程終止或者放棄空間.
Fr:?根據頁面替換算法每秒釋放的頁數. VMM的頁面替換例程會定時掃描頁面禎表,?以釋放一些長時間沒有訪問的數據頁到空閑列表.?在這個過程中,?計算頁面不會產生IO,?工作頁面如果數據沒有發生修改,?也不需要寫回磁盤,?不會產生IO.
Sr:?為了釋放頁面掃描的頁數. Sr值如果比fr值高很多,?說明替換算法要查找可疑替換的頁面越困難.
Cy:?每秒頁面替換代碼掃描了PFT多少次,?因為增加空閑列表達到maxfree值,?不一定需要完全掃描PFT表,?就是說這個值一般會小于1,?而所有vmstat輸出都為整數,?所以cy通常為0.
二, iostat命令
Iostat命令是活的第一印象的最快方法,?這個工具也報告cpu統計信息.
# iostat -t 2 5
?
System configuration: lcpu=8
?
tty:??????tin?????????tout????avg-cpu: % user % sys % idle % iowait
??????????0.0?????????16.0????????????????1.0???0.3???98.6??????0.1
??????????0.0?????????70.0????????????????6.1???0.3???93.6??????0.0
??????????0.0?????????34.5????????????????5.5???0.4???94.0??????0.1
??????????0.0?????????35.7????????????????1.4???0.3???98.3??????0.0
??????????0.0?????????33.0????????????????3.7???0.4???95.9??????0.0
三, Sar命令
Sar命令收集關于系統的統計數據.
Sar命令會增加系統負載,?如果采樣頻率較高就會加劇預先存在的性能問題.
Aix系統維護了一系列系統活動計數器,?用來記錄各種活動并提供sar命令報告的數據. Sar命令不會導致這些計數器被更新或使用,?不論sar命令是否運行這些計數器都會持續工作.?根據指定的sar命令的采樣速率和采樣次數,?它僅僅從這些計數器中提取數據并保存下來.
通過指定參數, sar命令提供了排隊,?頁面調度, TTY和許多其他的統計信息. Sar命令的一個重要功能是它會報告系統級(所有處理器的綜合)的cpu統計信息(對一些結果取平均值,?以百分比表示,?對其他求和),?或者報告每個獨立處理器的統計信息.
3.1?實時采樣和顯示
????# sar -u 1 10
?
AIX SISDB_B 3 5 00C674AF4C00????07/14/09
?
System configuration: lcpu=8??mode=Capped
?
16:24:44????%usr????%sys????%wio???%idle???physc
16:24:45??????17???????5???????2??????76????4.00
16:24:46??????22???????5???????1??????72????4.03
16:24:47??????37???????6???????1??????56????3.98
16:24:48??????19???????4???????3??????74????3.94
16:24:49??????16???????4???????1??????79????4.05
16:24:50??????27???????5???????2??????67????3.97
16:24:51??????14???????4???????1??????80????4.00
16:24:52??????14???????4???????1??????80????4.01
16:24:53??????16???????4???????1??????79????3.99
16:24:54???????4???????1???????0??????95????3.98
?
Average???????19???????4???????1??????76????4.00
報告每個處理器或整個系統的統計信息.?當與-P標志一起使用時,?為每個指定的處理器提供此信息;?否則,?只在系統范圍內提供此信息.?因為-u標志信息以百分比表示,?所以系統范圍信息只是每個處理器統計信息的平均值.
3.2 sar –P(報告每個處理器的信息)
-P選項報告指定處理器的每個處理器統計信息.?通過指定ALL關鍵字,?可以報告每個單獨的處理器統計信息和所有處理器的平均值.
# sar -uP ALL 3 2
?
AIX SISDB_B 3 5 00C674AF4C00????07/14/09
?
System configuration: lcpu=8??mode=Capped
?
16:33:32 cpu????%usr????%sys????%wio???%idle???physc
16:33:35??0????????8???????2???????1??????89????0.54
??????????1????????0???????0???????0?????100????0.45
??????????2????????5???????3???????0??????93????0.53
??????????3????????0???????0???????0?????100????0.47
??????????4???????18???????3???????1??????78????0.57
??????????5????????0???????0???????0?????100????0.42
??????????6????????8???????3???????1??????88????0.54
??????????7????????0???????0???????0?????100????0.46
??????????-????????6???????2???????0??????93????3.99
16:33:38??0???????23???????3???????0??????74????0.59
??????????1????????0???????0???????0?????100????0.41
??????????2????????8???????2???????1??????89????0.54
??????????3????????0???????0???????0?????100????0.46
??????????4????????2???????2???????0??????96????0.52
??????????5????????0???????0???????0?????100????0.48
??????????6????????4???????2???????0??????94????0.53
??????????7????????0???????0???????0?????100????0.47
??????????-????????5???????1???????0??????93????4.00
?
Average???0???????16???????3???????0??????81????0.57
??????????1????????0???????0???????0?????100????0.43
??????????2????????6???????3???????0??????91????0.53
??????????3????????0???????0???????0?????100????0.47
??????????4???????11???????3???????0??????86????0.55
??????????5????????0???????0???????0?????100????0.45
??????????6????????6???????2???????0??????91????0.53
??????????7????????0???????0???????0?????100????0.46
??????????-????????5???????2???????0??????93????4.00
????每節的最后一行在cpu一列中以一個短線(-)開始,?是所有處理器的平均值.?只有當使用-P ALL選項時才會顯示一個平均值.
3.3 sar –c (系統調用率)
????-c選項顯示了系統調用率.
# sar -c 1 3
?
AIX SISDB_B 3 5 00C674AF4C00????07/14/09
?
System configuration: lcpu=8??mode=Capped
?
16:38:47 scall/s sread/s swrit/s??fork/s??exec/s rchar/s wchar/s
16:38:48????8792?????681?????353????2.00????2.00 2364515???49391
16:38:49????7785?????281?????276????0.00????0.00???68447???30005
16:38:50????8997?????392?????392????0.00????0.00???51992???58212
?
Average?????8525?????451?????340????0.67????0.67??828318???45869
-c選項報告系統調用,?當與-P標志一起使用時,?只為每個指定處理器提供此信息;?否則在系統范圍內提供此信息.?將顯示以下數值:
| 欄 | 說明 |
| Scall/S | 報告系統調用總數 |
| Sread/S | 讀系統調用總數 |
| Swrite/S | 寫系統調用總數 |
| Fork/S | Fork系統調用總數 |
| Exec/S | Exec系統調用總數 |
| Rchar/S | 讀系統調用傳送的字符總數 |
| Wchar/S | 寫系統調用傳送的字符總數 |
????Vmstat也顯示系統調用率,?但如果這些系統調用時read(), write(), fork(), exec()和其他調用, sar命令也可以顯示他們.?請特別注意fork/s這一列.?如果它較高,?可能需要使用記賬實用程序(如trace命令或tprof命令)進行進一步調查.
3.4 sar –q(運行隊列長度和交換隊列長度)
# sar -q 1 10
?
AIX SISDB_B 3 5 00C674AF4C00????07/14/09
?
System configuration: lcpu=8??mode=Capped
?
16:47:19 runq-sz %runocc swpq-sz %swpocc
16:47:20?????1.0?????100???????????????
16:47:21?????2.0?????100???????????????
16:47:22?????1.0?????100???????????????
16:47:23?????1.0?????100???????????????
16:47:24?????1.0?????100???????????????
16:47:25???????????????????????????????
16:47:26???????????????????????????????
16:47:27?????1.0?????100???????????????
16:47:28?????1.0?????100???????????????
16:47:29???????????????????????????????
?
Average??????1.1??????70
| 欄 | 說明 |
| Runq-sz | 平均內核線程數 |
| %runocc | 運行隊列占用的時間百分比 |
| Swpq-sz | 等待頁面調入的內核線程數的平均值 |
| Swpocc | 調動隊列占用的時間百分比 |
????-q選項可以指出系統中是否運行太多的作業(runq-sz),?或有一個潛在的頁面調度瓶頸.?在一個高度事務性的系統中,?運行隊列可能有幾百個,?因為每個事務只使用少量的cpu時間.?如果頁面調度是主要問題,?則運行vmstat命令,?高的io等待表明存在嚴重的磁盤爭用活動,?或由于內存不足而產生過多的頁面調度.
四, tprof監視進程的cpu使用
Tprof用于統計每個進程的cpu使用情況.?對任何使用可能是cpu受限的情況,?以及想了解程序的哪些部分占用大量cpu的人,?該命令是一個有用的工具.
Tprof可用以下四種方式運行;
1,?實時或在線方式
2,?人工離線方式;
3,?自動離線方式;
4,?后處理方式
4.1?實時或在線方式
如果指定-x標志但未指定-A標記,?則tprof以實時方式運行.?在實時方式下, tprof在后臺啟動AIX trace實用程序并處理所產生的跟蹤數據.?當被概要分析的程序結束時, tprof收集符號名稱信息并生成報告.
# tprof -x sleep 10
Tue Jul 14 17:09:01 2009
System: AIX 5.3 Node: i2db Machine: 00CC886E4C00
Starting Command sleep 10
stopping trace collection.
Generating sleep.prof
# ls
perl01??????sleep.prof
# more sleep.prof
Configuration information
=========================
System: AIX 5.3 Node: i2db Machine: 00CC886E4C00
Tprof command was:
????tprof -x sleep 10
Trace command was:
????/usr/bin/trace -ad -M -L 1722525696 -T 500000 -j 000,00A,001,002,003,38F,005,006,134,139,5A2,5A5,465,234, -o -?
Total Samples = 685
Traced Time = 10.03s (out of a total execution time of 10.03s)
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<?
?
Process????????????????????????????????Freq??Total Kernel???User Shared??Other
=======????????????????????????????????====??===== ======???==== ======??=====
wait??????????????????????????????????????4 100.00 100.00???0.00???0.00???0.00
=======????????????????????????????????====??===== ======???==== ======??=====
Total?????????????????????????????????????4 100.00 100.00???0.00???0.00???0.00
?
Process???????????????????PID??????TID??Total Kernel???User Shared??Other
=======???????????????????===??????===??===== ======???==== ======??=====
wait?????????????????????8196?????8197??55.91??55.91???0.00???0.00???0.00
wait????????????????????57372????69667??14.74??14.74???0.00???0.00???0.00
wait????????????????????53274????61471??14.74??14.74???0.00???0.00???0.00
wait????????????????????49176????57373??14.60??14.60???0.00???0.00???0.00
=======???????????????????===??????===??===== ======???==== ======??=====
Total??????????????????????????????????100.00 100.00???0.00???0.00???0.00
上述命令運行10秒,?在當前目錄下創建一個名為sleep.tprof的文件. Sleep.tprof文件中字段total為此進程調度到的cpu次數, tprof的輸出準確地顯示出哪個進程在使用cpu時間.
??在上面的報告中我們看到,?大部分cpu時間都是被wait占用的,?這里的wait實際上是idle進程,?可以表明這個系統是一個完全空閑的系統.
五, ps命令
Ps命令主要用來顯示進程的當前狀態.
5.1?顯示占用cpu最高的進程
# ps aux |head -20
USER????????PID %CPU %MEM???SZ??RSS????TTY STAT????STIME??TIME COMMAND
root??????57372??6.1??0.0??384??384??????- A??????Jan 10 131504:45 wait
root??????73764??6.1??0.0??384??384??????- A??????Jan 10 129539:44 wait
root??????65568??6.0??0.0??384??384??????- A??????Jan 10 128808:58 wait
root???????8196??5.9??0.0??384??384??????- A??????Jan 10 126804:12 wait
root??????61470??5.9??0.0??384??384??????- A??????Jan 10 125464:31 wait
root??????77862??5.7??0.0??384??384??????- A??????Jan 10 122563:54 wait
root??????69666??5.7??0.0??384??384??????- A??????Jan 10 121680:22 wait
root??????53274??5.6??0.0??384??384??????- A??????Jan 10 119426:46 wait
oracle???409836??1.9??1.0 57344 81668??????- A????16:21:14??9:32 oracleSISDB2 (LO
oracle???856126??1.4??1.0 57140 81464??????- A????15:25:53 12:48 oracleSISDB2 (LO
oracle???598078??0.7??1.0 56740 81064??????- A????17:18:20??0:20 oracleSISDB2 (LO
oracle???606456??0.4??1.0 56036 80360??????- A????17:21:46??0:05 oracleSISDB2 (LO
oracle???966862??0.1??1.0 55144 79468??????- A??????Jul 08 70:32 oracleSISDB2 (LO
oracle???442494??0.1??1.0 58984 83308??????- A??????Feb 16 1711:01 ora_lms1_SISDB2
oracle???581808??0.1??1.0 59140 83464??????- A??????Feb 16 1706:08 ora_lms0_SISDB2
oracle???974952??0.1??1.0 55224 79548??????- A????12:54:44??1:46 oracleSISDB2 (LO
root?????176256??0.0??0.0??508??512??????- A??????Jan 10 211:58 /usr/sbin/syncd
oracle???573582??0.0??1.0 57680 82004??????- A??????Feb 16 142:18 ora_lmon_SISDB2
oracle???651300??0.0??1.0 57204 81528??????- A??????Feb 16 118:48 ora_diag_SISDB2
在這個輸出結果中,?排在前面的8個root用戶的wait進程,?這其實是cpu空閑的時候運行的空閑進程.
所以cpu最高的幾個進程實際是下面的oracle用戶的歐瑞aSISDB2進程,?我們可以用下面的方法查看具體的進程在干什么事情.
例如我們查看PID = 487432的進程,?可以使用下面的方法.
# su - oracle
[YOU HAVE NEW MAIL]
$ sqlplus /nolog
?
SQL*Plus: Release 10.2.0.3.0 - Production on Tue Jul 14 17:24:42 2009
?
Copyright (c) 1982, 2006, Oracle.??All Rights Reserved.
?
SQL> conn / as sysdba
Connected.
SQL> oradebug setospid 487432
Oracle pid: 12, Unix process pid: 487432, image: oracle@i2db (MMNL)
SQL> oradebug event 10046 trace name context forever,level 8
Statement processed.
SQL> oradebug tracefile_name
/oracle/admin/arpdb/bdump/arpdb_mmnl_487432.trc
SQL> oradebug event 10046 trace name context off
Statement processed.
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bit Production
With the Partitioning, OLAP and Data Mining options
$ tkprof /oracle/admin/arpdb/bdump/arpdb_mmnl_487432.trc
output = arpdb_mm1.txt
TKPROF: Release 10.2.0.3.0 - Production on Tue Jul 14 17:31:29 2009
Copyright (c) 1982, 2005, Oracle.??All rights reserved.
$
六,?小結
對于系統cpu的監控,建議:
1)使用vmstat進行分析
2)sar –P ALL 1 10?分析,多個cpu間的負載是否平衡
3)ps aux?查看
4)tprof查看更詳細的信息
總結
以上是生活随笔為你收集整理的AIX系统CPU监控与评估的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有关UNLIMITED TABLESPA
- 下一篇: java信息管理系统总结_java实现科