高级 Linux 命令精通指南(2)
xargs
大多數 Linux 命令都會產生輸出:文件列表、字符串列表等。但如果要使用其他某個命令并將前一個命令的輸出作為參數該怎么辦?例如,file?命令顯示文件類型(可執行文件、ascii 文本等);您可以處理輸出,使其僅顯示文件名,現在您希望將這些名稱傳遞給?ls -l?命令以查看時間戳記。xargs?命令就是用來完成此項工作的。它允許您對輸出執行其他某些命令。記住下面這個來自于第 1 部分中的語法:
file -Lz * | grep ASCII | cut -d":" -f1 | xargs ls -ltr
讓我們來剖析這個命令字符串。第一個,file -Lz *,用于查找是符號鏈接或者經過壓縮的文件。它將輸出傳遞給下一個命令?grep ASCII,該命令在其中搜索 "ASCII" 字符串并產生如下所示的輸出:
alert_DBA102.log: ASCII English text
alert_DBA102.log.Z: ASCII text (compress'd data 16 bits)
dba102_asmb_12307.trc.Z: ASCII English text (compress'd data 16 bits)
dba102_asmb_20653.trc.Z: ASCII English text (compress'd data 16 bits)
由于我們只對文件名感興趣,因此我們應用下一個命令?cut -d":" -f1,僅顯示第一個字段:
alert_DBA102.log
alert_DBA102.log.Z
dba102_asmb_12307.trc.Z
dba102_asmb_20653.trc.Z
現在,我們希望使用?ls -l?命令,將上述列表作為參數進行傳遞,一次傳遞一個。xargs?命令允許您這樣做。最后一部分,xargs ls -ltr,用于接收輸出并對其執行?ls -ltr?命令,如下所示:
ls -ltr alert_DBA102.log
ls -ltr alert_DBA102.log.Z
ls -ltr dba102_asmb_12307.trc.Z
ls -ltr dba102_asmb_20653.trc.Z
因此,xargs?本身雖然沒有多大用處,但在與其他命令相結合時,它的功能非常強大。
下面是另一個示例,我們希望計算這些文件中的行數:
$ file * | grep ASCII | cut -d":" -f1 | xargs wc -l
47853 alert_DBA102.log
19 dba102_cjq0_14493.trc
29053 dba102_mmnl_14497.trc
154 dba102_reco_14491.trc
43 dba102_rvwr_14518.trc
77122 total
(注:上述任務還可用以下命令完成:)
$ wc -l ‘file * | grep ASCII | cut -d":" -f1 | grep ASCII | cut -d":" -f1‘
該?xargs?版本用于闡釋概念。Linux 可以用幾種方法來完成同一個任務;請使用最適合您的情況的方法。
使用該方法,您可以快速重命名目錄中的文件。
$ ls | xargs -t -i mv {} {}.bak
-i 選項告訴?xargs?用每項的名稱替換 {}。-t 選項指示?xargs?先打印命令,然后再執行。
另一個非常有用的操作是當您使用 vi 打開要編輯的文件時:
$ file * | grep ASCII | cut -d":" -f1 | xargs vi
該命令使用 vi 逐個打開文件。當您希望搜索多個文件并打開它們進行編輯時,使用該命令非常方便。
它還有幾個選項。最有用的可能是 -p 選項,它使操作具有可交互性:
$ file * | grep ASCII | cut -d":" -f1 | xargs -p vi
vi alert_DBA102.log dba102_cjq0_14493.trc dba102_mmnl_14497.trc
dba102_reco_14491.trc dba102_rvwr_14518.trc ?...
此處的?xarg?要求您在運行每個命令之前進行確認。如果您按下 "y",則執行命令。當您對文件進行某些可能有破壞且不可恢復的操作(如刪除或覆蓋)時,您會發現該選項非常有用。
-t 選項使用一個詳細模式;它顯示要運行的命令,是調試過程中一個非常有幫助的選項。
如果傳遞給?xargs?的輸出為空怎么辦?考慮以下命令:
$ file * | grep SSSSSS | cut -d":" -f1 | xargs -t wc -l
wc -l
0
$
在此處,搜索 "SSSSSS" 后沒有匹配的內容;因此 xargs 的輸入均為空,如第二行所示(由于我們使用 -t 這個詳細選項而產生的結果)。雖然這可能會有所幫助,但在某些情況下,如果沒有要處理的內容,您可能希望停止?xargs;如果是這樣,可以使用 -r 選項:
$ file * | grep SSSSSS | cut -d":" -f1 | xargs -t -r wc -l
$
如果沒有要運行的內容,該命令退出。
假設您希望使用?rm?命令(該命令將作為?xargs?命令的參數)刪除文件。然而,rm?只能接受有限數量的參數。如果您的參數列表超出該限制怎么辦?xargs 的 -n 選項限制單個命令行的參數個數。
下面顯示了如何限制每個命令行僅使用兩個參數:即使向?xargs ls -ltr?傳遞五個文件,但每次向?ls -ltr?僅傳遞兩個文件。
$ file * | grep ASCII | cut -d":" -f1 | xargs -t -n2 ls -ltr
ls -ltr alert_DBA102.log dba102_cjq0_14493.trc
-rw-r----- 1 oracle dba 738 Aug 10 19:18 dba102_cjq0_14493.trc
-rw-r--r-- 1 oracle dba 2410225 Aug 13 05:31 alert_DBA102.log
ls -ltr dba102_mmnl_14497.trc dba102_reco_14491.trc
-rw-r----- 1 oracle dba 5386163 Aug 10 17:55 dba102_mmnl_14497.trc
-rw-r----- 1 oracle dba 6808 Aug 13 05:21 dba102_reco_14491.trc
ls -ltr dba102_rvwr_14518.trc
-rw-r----- 1 oracle dba 2087 Aug 10 04:30 dba102_rvwr_14518.trc
使用該方法,您可以快速重命名目錄中的文件。
$ ls | xargs -t -i mv {} {}.bak
-i 選項告訴?xargs?用每項的名稱替換 {}。
rename
正如您所知道的那樣,mv?命令對文件進行重命名。例如,
$ mv oldname newname
將 oldname 文件重命名為 newname。但如果您不知道文件名,那該怎么辦?rename?命令在此處就可以大顯身手了。
rename .log .log.‘date +%F-%H:%M:%S‘ *
用 .log.<日期格式> 替換所有擴展名為 .log 的文件。因此,sqlnet.log 變為 sqlnet.log.2006-09-12-23:26:28。
find
最受 Oracle 用戶歡迎的命令之一是?find?命令。到目前為止,您了解了如何使用?find?在給定目錄中查找文件。下面的示例顯示在當前目錄中查找以單詞 "file" 開頭的文件:
$ find . -name "file*"
./file2
./file1
./file3
./file4
然而,如果您希望搜索 FILE1、FILE2 等名稱怎么辦?-name "file*" 不會與之匹配。對于區分大小寫的搜索,可以使用 -iname 選項:
$ find . -iname "file*"
./file2
./file1
./file3
./file4
./FILE1
./FILE2
您可以限制搜索范圍,僅搜索特定類型的文件。例如,上述命令將獲得所有類型的文件:普通文件、目錄、符號鏈接等。如果僅搜索普通文件,可使用 -type f 參數。
$ find . -name "orapw*" -type f
./orapw+ASM
./orapwDBA102
./orapwRMANTEST
./orapwRMANDUP
./orapwTESTAUX
-type 可以接受修飾符 f(普通文件)、l(符號鏈接)、d(目錄)、b(塊設備)、p(命名管道)、c(字符設備)、s(套接字)。
對上述命令的一個小技巧是,將其與您在第 1 部分中學到的?file?命令相結合。file?命令告訴您文件的類型。您可以將其作為?find?命令的輸出的后處理器進行傳遞。-exec 參數執行該參數后面的命令。在該示例中,在?find?后執行的命令是?file:
$ find . -name "*oraenv*" -type f -exec file {} \;
./coraenv: Bourne shell script text executable
./oraenv: Bourne shell script text executable
當您希望弄清楚 ASCII 文本文件是否可能是某種類型的 shell 腳本時,該命令非常有用。
如果您用 -ok 替換 -exec,則執行該命令之前要求您先進行確認。下面就是一個例子:
$ find . -name "sqlplus*" -ok {} \;
< {} ... ./sqlplus > ? y
SQL*Plus: Release 9.2.0.5.0 - Production on Sun Aug 6 11:28:15 2006
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Enter user-name: / as sysdba
Connected to:
Oracle9i Enterprise Edition Release 9.2.0.5.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP and Oracle Data Mining options
JServer Release 9.2.0.5.0 - Production
SQL> exit
Disconnected from Oracle9i Enterprise Edition Release 9.2.0.5.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP and Oracle Data Mining options
JServer Release 9.2.0.5.0 - Production
< è* ... ./sqlplusO > ? n
$
在此示例中,我們要求 shell 查找所有以 "sqlplus" 開頭的程序并執行它們。注意,-ok 與 {} 之間什么都沒有,因此僅執行找到的文件。shell 找到兩個文件 — sqlplus 和 sqlplusO — 并在每次找到后詢問您是否希望執行文件。我們針對 "sqlplus" 回答 "y",因此執行該文件。退出之后,shell 提示您找到了第二個文件 (sqlplusO),再次要求您確認,我們回答 "n",因此不執行該文件。
<!-- Tips Box start -->
適用于 Oracle 用戶的技巧
Oracle 產生許多不必要的文件:跟蹤文件、日志文件、轉儲文件等。如果不定期清理,這些文件就會占滿文件系統,從而導致數據庫暫停。
為了避免出現這種情況,只需搜索擴展名為 "trc" 的文件,如果這些文件的存在時間超過三天,則將其刪除。一個簡單的命令即可實現該操作:
find . -name "*.trc" -ctime +3 -exec rm {} \;要強制刪除存在不到三天的文件,請使用 -f 選項。
find . -name "*.trc" -ctime +3 -exec rm -f {} \;
如果只想列出文件:
find . -name "*.trc" -ctime +3 -exec ls -l {} \;<!-- Tips Box end -->
m4
該命令接受一個輸入文件并用所傳遞的參數替換其中的字符串,類似于替換變量。例如,以下是一個輸入文件:
$ cat temp
The COLOR fox jumped over the TYPE fence.
如果要用 "brown" 替換字符串 "COLOR",用 "broken" 替換 "TYPE",您可以使用以下命令:
$ m4 -DCOLOR=brown -DTYPE=broken temp
The brown fox jumped over the broken fence.
Else, if you want to substitute "white" and "high" for the same:
$ m4 -DCOLOR=white -DTYPE=high temp
The white fox jumped over the high fence.
whence 和 which
這兩個命令用于找到所提到的可執行文件在用戶路徑中的存儲位置。在路徑中找到可執行文件之后,這兩個命令的行為基本相同,都顯示文件的路徑:
$ which sqlplus
/u02/app/oracle/products/10.2.0.1/db1/bin/sqlplus
$ whence sqlplus
/u02/app/oracle/products/10.2.0.1/db1/bin/sqlplus
輸出完全相同。然而,如果在路徑中未找到可執行文件,則兩者的行為不同。which?命令生成一條顯式消息:
$ which sqlplus1
/usr/bin/which: no sqlplus1 in (/u02/app/oracle/products/10.2.0.1/db1/bin:/usr
/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin)
whence?命令不生成任何消息:
$ whence sqlplus1]
而是返回到 shell 提示符。如果在路徑中未找到可執行文件,這將很有幫助(不顯示消息):
$ whence invalid_command
$ which invalid_command
which: no invalid_command in (/usr/kerberos/sbin:/usr/kerberos/bin:/bin:/sbin:
/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:
/usr/bin/X11:/usr/X11R6/bin:/root/bin)
如果?whence?在路徑中未找到可執行文件,它不返回任何消息,但返回代碼不為零。在 shell 腳本中可以利用這個事實;例如:
RC=‘whence myexec‘
If [ $RC -ne "0" ]; then
echo "myexec is not in the $PATH"
fi
它的一個非常有用的選項是 -i 選項,該選項顯示別名以及可執行文件(如果有的話)。例如,您在本文開始部分了解了別名的用法。rm?命令實際上是我的 shell 中的一個別名,系統中某處也有一個?rm?命令。
$ which ls
/bin/ls
$ which -i ls
alias ls='ls --color=tty'
/bin/ls
其默認行為是顯示可執行文件在路徑中的首次出現。如果可執行文件位于路徑的多個目錄中,則忽略其后的出現。您可以通過 -a 選項查看可執行文件的所有出現位置。
$ which java
/usr/bin/java
$ which -a java
/usr/bin/java
/home/oracle/oracle/product/11.1/db_1/jdk/jre/bin/java
top
top?命令可能是 Oracle DBA 在 Linux 上管理數據庫時最有用的命令。如果系統很慢,您可能希望查看誰在占用所有 CPU 和/或內存。要顯示最大進程,可以使用?top?命令。
注意,與其他命令不同,top?不會產生輸出,屏幕內容保持不變。它刷新屏幕以顯示新信息。因此,如果您只執行?top?并保持屏幕一直開啟,則屏幕始終顯示最新信息。要停止并退出 shell,可以按下 Ctrl-C。
$ top
18:46:13 up 11 days, 21:50, 5 users, load average: 0.11, 0.19, 0.18
151 processes: 147 sleeping, 4 running, 0 zombie, 0 stopped
CPU states: cpu user nice system irq softirq iowait idle
total 12.5% 0.0% 6.7% 0.0% 0.0% 5.3% 75.2%
Mem: 1026912k av, 999548k used, 27364k free, 0k shrd, 116104k buff
758312k actv, 145904k in_d, 16192k in_c
Swap: 2041192k av, 122224k used, 1918968k free 590140k cached
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME CPU COMMAND
451 oracle 15 0 6044 4928 4216 S 0.1 0.4 0:20 0 tnslsnr
8991 oracle 15 0 1248 1248 896 R 0.1 0.1 0:00 0 top
1 root 19 0 440 400 372 S 0.0 0.0 0:04 0 init
2 root 15 0 0 0 0 SW 0.0 0.0 0:00 0 keventd
3 root 15 0 0 0 0 SW 0.0 0.0 0:00 0 kapmd
4 root 34 19 0 0 0 SWN 0.0 0.0 0:00 0 ksoftirqd/0
7 root 15 0 0 0 0 SW 0.0 0.0 0:01 0 bdflush
5 root 15 0 0 0 0 SW 0.0 0.0 0:33 0 kswapd
6 root 15 0 0 0 0 SW 0.0 0.0 0:14 0 kscand
8 root 15 0 0 0 0 SW 0.0 0.0 0:00 0 kupdated
9 root 25 0 0 0 0 SW 0.0 0.0 0:00 0 mdrecoveryd
... output snipped ...
讓我們來看看產生的不同類型的信息。第一行:
18:46:13 up 11 days, 21:50, 5 users, load average: 0.11, 0.19, 0.18
顯示當前時間 (18:46:13),該系統已經運行了 11 天;并且已經工作了 21 小時 50 秒。后面顯示的分別是最近 1、5、15 分鐘的系統平均負載 (0.11、0.19、0.18)。(順便提一下,您也可以通過執行?uptime?命令來獲得這些信息。)
如果不需要平均負載,按下字母 "l"(小寫字母 L);它將關閉。要再次將其打開,按下 l。第二行:
151 processes: 147 sleeping, 4 running, 0 zombie, 0 stopped
顯示進程數、運行的進程數、休眠的進程數等。第三行和第四行:
CPU states: cpu user nice system irq softirq iowait idle
total 12.5% 0.0% 6.7% 0.0% 0.0% 5.3% 75.2%
顯示 CPU 利用率的詳細信息。上面一行顯示用戶進程占用了 CPU 的 12.5%,系統占用了 6.7%。用戶進程中包括 Oracle 進程。按下 "t" 可以關閉和打開這三行。如果有多個 CPU,屏幕將在每行顯示一個 CPU 的信息。
接下來的兩行:
Mem: 1026912k av, 1000688k used, 26224k free, 0k shrd, 113624k buff
758668k actv, 146872k in_d, 14460k in_c
Swap: 2041192k av, 122476k used, 1918716k free 591776k cached
顯示可用的和已利用的內存。內存總量為 "1026912k av"(大約 1GB),其中只有 26224k(即 26MB)是可用的。交換空間為 2GB;但幾乎并未使用。要關閉和打開這兩行,可以按下 "m"。
其余的顯示內容以表格格式顯示進程。下面對各列進行解釋:
?
| 列 | 描述 |
| PID | 進程的進程 ID |
| USER | 運行該進程的用戶 |
| PRI | 進程的優先級 |
| NI | nice 值:該值越高,任務的優先級越低 |
| SIZE | 該進程使用的內存(代碼+數據+堆棧) |
| RSS | 該進程使用的物理內存 |
| SHARE | 該進程使用的共享內存 |
| STAT | 該進程的狀態,用代碼顯示。一些主要的狀態代碼包括: 您還會看到第二個和第三個字符,它們表示: |
| %CPU | 該進程使用的 CPU 百分比 |
| %MEM | 該進程使用的內存百分比 |
| TIME | 該進程使用的總 CPU 時間 |
| CPU | 如果這是一個多處理器系統,該列指明正在其上運行進程的 CPU 的 ID。 |
| COMMAND | 該進程發出的命令 |
?
顯示?top?時,您可以按幾個鍵來設置希望的顯示格式。按下大寫字母 M 鍵可根據內存使用情況對輸出進行排序。(注意,使用小寫字母 m 將在顯示屏的頂部打開或關閉內存匯總行。)當您希望了解誰在占用內存時,該鍵非常有用。示例輸出如下:
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME CPU COMMAND
31903 oracle 15 0 75760 72M 72508 S 0.0 7.2 0:01 0 ora_smon_PRODB2
31909 oracle 15 0 68944 66M 64572 S 0.0 6.6 0:03 0 ora_mmon_PRODB2
31897 oracle 15 0 53788 49M 48652 S 0.0 4.9 0:00 0 ora_dbw0_PRODB2
既然您了解了如何解釋輸出,我們來看看如何使用命令行參數。
最有用的參數是 -d,它指示兩次屏幕刷新之間的延遲。要每秒刷新一次,則使用?top -d 1。
另一個有用的選項是 -p。如果您希望只監視幾個進程而并非全部,可以在 -p 選項后指定這幾個進程。要監視進程 13609、13608 和 13554,執行以下命令:
top -p 13609 -p 13608 -p 13554
這將以和?top?命令相同的格式顯示結果,但只顯示特定進程的信息。
<!-- Tips Box start -->
適用于 Oracle 用戶的技巧
眾所周知,使用?top?實用程序分析數據庫服務器的性能非常方便。下面是部分?top?輸出。
20:51:14 up 11 days, 23:55, 4 users, load average: 0.88, 0.39, 0.27113 processes: 110 sleeping, 2 running, 1 zombie, 0 stopped
CPU states: cpu user nice system irq softirq iowait idle
total 1.0% 0.0% 5.6% 2.2% 0.0% 91.2% 0.0%
Mem: 1026912k av, 1008832k used, 18080k free, 0k shrd, 30064k buff
771512k actv, 141348k in_d, 13308k in_c
Swap: 2041192k av, 66776k used, 1974416k free 812652k cached
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME CPU COMMAND
16143 oracle 15 0 39280 32M 26608 D 4.0 3.2 0:02 0 oraclePRODB2...
5 root 15 0 0 0 0 SW 1.6 0.0 0:33 0 kswapd
... output snipped ...
我們來仔細分析此輸出。首先,您需要注意 CPU states 下面的 "idle" 列;該列為 0.0%,這意味著 CPU 被完全占用來執行某項任務。問題是 CPU 在做什么?將注意力轉向 "system" 列,就在左側不遠處;該列顯示 5.6%。這說明,系統本身占用的 CPU 并不多。再向左就是 "user" 列,該列顯示 1.0%。由于用戶進程還包括 Oracle,因此 Oracle 并未占用 CPU 周期。那么,到底是什么占用了整個 CPU?
答案就在同一行右側 "iowait" 列下面,該列為 91.2%。一切都明白了:91.2% 的 CPU 時間都在等待 IO。
為什么會有這么多的 IO 等待?答案在顯示內容中。注意最消耗資源的進程的 PID:16143 您可以使用以下查詢來確定該進程在做什么:
select s.sid, s.username, s.programfrom v$session s, v$process p
where spid = 16143
and p.addr = s.paddr
/
SID USERNAME PROGRAM
------------------- -----------------------------
159 SYS rman@prolin2 (TNS V1-V3)
rman 進程在進行與 CPU 周期相關的 IO 等待。該信息可以幫助您確定接下來的操作流程。
<!-- Tips Box end -->
skill 和 snice
通過前面的討論,您已經了解了如何識別占用 CPU 的資源。如果您發現了一個占用大量 CPU 和內存的進程,但又不想停止它,該怎么辦?考慮下面的?top?輸出:
$ top -c -p 16514
23:00:44 up 12 days, 2:04, 4 users, load average: 0.47, 0.35, 0.31
1 processes: 1 sleeping, 0 running, 0 zombie, 0 stopped
CPU states: cpu user nice system irq softirq iowait idle
total 0.0% 0.6% 8.7% 2.2% 0.0% 88.3% 0.0%
Mem: 1026912k av, 1010476k used, 16436k free, 0k shrd, 52128k buff
766724k actv, 143128k in_d, 14264k in_c
Swap: 2041192k av, 83160k used, 1958032k free 799432k cached
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME CPU COMMAND
16514 oracle 19 4 28796 26M 20252 D N 7.0 2.5 0:03 0 oraclePRODB2...
既然您確認進程 16514 占用了大量內存,您就可以使用?skill?命令“凍結”它,而不是停止它。
$ skill -STOP 1
之后,檢查?top?輸出:
23:01:11 up 12 days, 2:05, 4 users, load average: 1.20, 0.54, 0.38
1 processes: 0 sleeping, 0 running, 0 zombie, 1 stopped
CPU states: cpu user nice system irq softirq iowait idle
total 2.3% 0.0% 0.3% 0.0% 0.0% 2.3% 94.8%
Mem: 1026912k av, 1008756k used, 18156k free, 0k shrd, 3976k buff
770024k actv, 143496k in_d, 12876k in_c
Swap: 2041192k av, 83152k used, 1958040k free 851200k cached
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME CPU COMMAND
16514 oracle 19 4 28796 26M 20252 T N 0.0 2.5 0:04 0 oraclePRODB2...
現在,CPU 從 0% 空閑變為 94% 空閑。該進程被有效凍結。過一段時間之后,您可能希望喚醒該進程:
$ skill -CONT 16514
如果希望暫時凍結進程以便為完成更重要的進程騰出空間,該方法非常有用。
此命令用途很廣。如果您要停止 "oracle" 用戶的所有進程,只需要一個命令即可實現:
$ skill -STOP oracle
可以使用用戶、PID、命令或終端 id 作為參數。以下命令可停止所有 rman 命令。
$ skill -STOP rman
如您所見,skill?決定您輸入的參數(進程 ID、用戶 ID 或命令)并進行相應操作。這可能會導致在某些情況下出現這樣的問題:您可能具有同名的用戶和命令。最好的示例是 "oracle" 進程,通常由用戶 "oracle" 運行。因此,當您希望停止名為 "oracle" 的進程時,可執行以下命令:
$ skill -STOP oracle
用戶 "oracle" 的所有進程都停止,包括您可能要使用的會話。要非常明確地執行命令,您可以選擇使用一個新參數指定參數的類型。要停止一個名為 oracle 的命令,可執行以下命令:
$ skill -STOP -c oracle
snice 命令的功能與 skill 類似。但它用于降低進程的優先級,而不是停止進程。首先,檢查 top 輸出:
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME CPU COMMAND
3 root 15 0 0 0 0 RW 0.0 0.0 0:00 0 kapmd
13680 oracle 15 0 11336 10M 8820 T 0.0 1.0 0:00 0 oracle
13683 oracle 15 0 9972 9608 7788 T 0.0 0.9 0:00 0 oracle
13686 oracle 15 0 9860 9496 7676 T 0.0 0.9 0:00 0 oracle
13689 oracle 15 0 10004 9640 7820 T 0.0 0.9 0:00 0 oracle
13695 oracle 15 0 9984 9620 7800 T 0.0 0.9 0:00 0 oracle
13698 oracle 15 0 10064 9700 7884 T 0.0 0.9 0:00 0 oracle
13701 oracle 15 0 22204 21M 16940 T 0.0 2.1 0:00 0 oracle
現在,將 "oracle" 進程的優先級降低四個點。注意,該值越高,優先級越低。
$ snice +4 -u oracle
PID USER PRI NI SIZE RSS SHARE STAT %CPU %MEM TIME CPU COMMAND
16894 oracle 20 4 38904 32M 26248 D N 5.5 3.2 0:01 0 oracle
注意,NI 列(nice 值)現在是 4,優先級現在設置為 20,而不是 15。這對于降低優先級非常有幫助。
Arup Nanda?(arup@proligence.com) 擔任 Oracle DBA 已 12 余載,處理過從性能優化到安全性和災難恢復等各方面的數據庫管理問題。他與人合著了?PL/SQL for DBAs?(O'Reilly Media, 2005),并曾在 2003 年榮獲?Oracle Magazine?的 DBA 稱號,現在為 Oracle ACE。
轉載于:https://blog.51cto.com/jarson/573636
總結
以上是生活随笔為你收集整理的高级 Linux 命令精通指南(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VS2010 + QT 5 +open
- 下一篇: linux 流场分析软件,scSTREA