第一步:使用

創(chuàng)新互聯(lián)建站是一家以網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)、品牌設(shè)計(jì)、軟件運(yùn)維、seo優(yōu)化排名、小程序App開(kāi)發(fā)等移動(dòng)開(kāi)發(fā)為一體互聯(lián)網(wǎng)公司。已累計(jì)為塑料袋等眾行業(yè)中小客戶提供優(yōu)質(zhì)的互聯(lián)網(wǎng)建站和軟件開(kāi)發(fā)服務(wù)。
top命令,然后按shift+p按照CPU排序
找到占用CPU過(guò)高的進(jìn)程的pid
第二步:使用
top -H -p [進(jìn)程id]
找到進(jìn)程中消耗資源最高的線程的id
第三步:使用
echo 'obase=16;[線程id]' | bc或者printf "%x\n" [線程id]
將線程id轉(zhuǎn)換為16進(jìn)制(字母要小寫(xiě))
bc是linux的計(jì)算器命令
第四步:執(zhí)行
jstack [進(jìn)程id] |grep -A 10 [線程id的16進(jìn)制]”
查看線程狀態(tài)信息
思路就是top查看是什么進(jìn)程占用高,一般是應(yīng)用或者數(shù)據(jù)庫(kù),應(yīng)用方面可以看看運(yùn)行吐出日志是否有報(bào)錯(cuò)信息,查netstat連接應(yīng)用端口的會(huì)話是不是有異常,數(shù)據(jù)庫(kù)進(jìn)程高,可以使用自帶的檢查命令后臺(tái)看是否有執(zhí)行很久的sql事務(wù),鎖等待頻繁,報(bào)錯(cuò)日志等,找到問(wèn)題針對(duì)性的優(yōu)化,一步一步解決。
bc看上去是連續(xù)的字母,其實(shí)是罵人的臟話,是白癡的意思,是網(wǎng)絡(luò)用語(yǔ),在騰訊\MSN中常見(jiàn)BC還有公元前的意思.BC BitComet的簡(jiǎn)稱 BC 加拿大不列顛哥倫比亞省簡(jiǎn)稱BC省 BC 網(wǎng)絡(luò)語(yǔ)言,表示“棒槌”B代表Before,在...之前的意思C代表Christ,基督的意思.西方以基督出生的年份為公元1年,所以在此之前就叫公元前.所以習(xí)慣上常用BC或B.C.代表公元前. BC: Business Customer ,商業(yè)(企業(yè))客戶。BC:Boston College的縮寫(xiě)LINUX命令bc 命令用途為任意精度算術(shù)語(yǔ)言提供解釋器。語(yǔ)法bc [ -c ] [ -l ] [ File ... ]描述bc 命令是一個(gè)提供任意精度算術(shù)的交互式進(jìn)程。bc 命令首先讀取由 File 參數(shù)指定的任一輸入文件,然后讀取標(biāo)準(zhǔn)輸入。輸入文件必須是包含 bc 命令能讀取并執(zhí)行的命令序列、語(yǔ)句或函數(shù)定義的文本文件。bc 命令是 dc 命令的預(yù)處理程序。除非指定 -c(僅編譯)標(biāo)志,否則它自動(dòng)調(diào)用 dc 命令。如果指定了 -c 標(biāo)志,則來(lái)自 bc 命令的輸出轉(zhuǎn)到標(biāo)準(zhǔn)輸出。bc 命令允許您來(lái)指定十進(jìn)制、八進(jìn)制或十六進(jìn)制的運(yùn)算的輸入和輸出進(jìn)制。缺省值為十進(jìn)制。此命令還提供了十進(jìn)制點(diǎn)符號(hào)的比例縮放規(guī)定。bc 命令始終使用 .(點(diǎn)號(hào))來(lái)表示基數(shù)點(diǎn),而不考慮指定為當(dāng)前語(yǔ)言環(huán)境部分的任何十進(jìn)制點(diǎn)字符。bc 命令的語(yǔ)法類似于 C 語(yǔ)言的語(yǔ)法。可以使用 bc 命令通過(guò)將 ibase 關(guān)鍵字指定給輸入進(jìn)制而 obase 關(guān)鍵字指定給輸出進(jìn)制來(lái)在各進(jìn)制間轉(zhuǎn)化。2 到 16 的范圍對(duì)于 ibase 關(guān)鍵字是有效的。obase 關(guān)鍵字的范圍從 2 直到 /usr/include/sys/limits.h 文件中定義的 BC_BASE_MAX 值設(shè)置的限制。不考慮 ibase 和 obase 的設(shè)置,bc 命令將字母 A 到 F 識(shí)別為其十六進(jìn)制值 10 到 15。bc 命令的輸出由讀取程序控制。輸出由包含所有執(zhí)行的未賦值表達(dá)式的值的一行或多行構(gòu)成。輸出的基數(shù)和精度由 obase 和 scale 關(guān)鍵字的值控制。有關(guān) bc 命令處理來(lái)自源文件信息的方式的進(jìn)一步的信息在以下各節(jié)中得到描述:* 語(yǔ)法* 詞法約定* 標(biāo)識(shí)符和運(yùn)算符* 表達(dá)式* 語(yǔ)句* 函數(shù)調(diào)用* -I 數(shù)學(xué)庫(kù)中的函數(shù)
linux命令行計(jì)算器
詳細(xì)文檔請(qǐng) man bc
在windows下,大家都知道直接運(yùn)行calc,(c:\windows\system32\calc.exe),可以打開(kāi)計(jì)算器。
注:
calculate vt.vi.
計(jì)算;calculator n. 計(jì)算器。calc就是這個(gè)計(jì)算的簡(jiǎn)寫(xiě)。
Ca在化學(xué)中是代表鈣元素,calcium?
鈣(20號(hào)元素,符號(hào)Ca)。兩者有什么聯(lián)系呢?
calculate 來(lái)自calculus,原義是做算術(shù)運(yùn)算的小石子,是calx(石灰石)的小稱。
那么在linux系統(tǒng)下,有無(wú)與windows下calc.exe類似的計(jì)算器呢?
下面總結(jié)linux下的三個(gè)命令,來(lái)介紹一下linux下的計(jì)算方法:
1)bc
bc在默認(rèn)的情況下是個(gè)交互式的指 令。在bc工作環(huán)境下,可以使用以下計(jì)算符號(hào):
+ 加法
- 減法
* 乘法
/ 除法
^ 指數(shù)
% 余數(shù)
如:
#
bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation,
Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
3+6???????????
=加法
9
4+2*3??????????=加法、乘法
10
(4+2)*3????????=加法、乘法(優(yōu)先)
18
4*6/8?????????
=乘法、除法
3
10^3?????????
=指數(shù)
1000
18%5???????????=余數(shù)
3+4;5*2;5^2;18/4?????
=一行輸入多個(gè)計(jì)算,用;相隔。
7
10
25
4
quit ???????????=退出
# bc
bc 1.06
Copyright 1991-1994, 1997, 1998, 2000 Free Software Foundation,
Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
scale=3????????
=設(shè)小數(shù)位
1/3
.333
quit
以上是交互的計(jì)算,那到也可以 不進(jìn)行交互而直接計(jì)算出結(jié)果。
A.用echo和|法,如:
# echo "(6+3)*2" |bc
18
# echo 15/4 |bc
3
# echo "scale=2;15/4"
|bc
3.75
# echo "3+4;5*2;5^2;18/4"
|bc
7
10
25
4
另外,
bc除了scale來(lái)設(shè)定小數(shù)位之外,還有ibase和obase來(lái)其它進(jìn)制的運(yùn)算。
如:
//將16進(jìn)制的A7輸出為10進(jìn)制, 注意,英文只能大寫(xiě)
# echo "ibase=16;A7"
|bc
167
//將2進(jìn)制的11111111轉(zhuǎn)成10進(jìn)制
# echo "ibase=2;11111111"
|bc
255
//輸入為16進(jìn)制,輸出為2進(jìn)制
# echo "ibase=16;obase=2;B5-A4"
|bc
10001
對(duì)于bc還有補(bǔ)充,在bc --help中還可以發(fā)現(xiàn):bc后可以接文件名。如:
# more calc.txt
3+2
4+5
8*2
10/4
# bc calc.txt
5
9
16
2
2)expr
expr命令可不光能計(jì)算加減乘除哦,還有很多表達(dá)式,都可以計(jì)算出結(jié)果,不過(guò)有一點(diǎn)需要注意,在計(jì)算加減乘除時(shí),不要忘了使用空格和轉(zhuǎn)義。下
面直接用實(shí)例來(lái)介紹一下expr的運(yùn)算,如:
# expr 6 +
3??????
(有空格)
9
# expr?2 \*
3?????
(有轉(zhuǎn)義符號(hào))
6
# expr 14 % 9
5
# a=3
# expr
$a+5?????????
(無(wú)空格)
3+5
# expr $a +
5????????
(變量,有空格)
8
#
a=`expr 4 + 2`
echo $a
6
# expr $a + 3
9
另外,expr對(duì)于字串的操作(計(jì)算)也是很方便的,如:
//字串長(zhǎng)度
#?expr length
"yangzhigang.cublog.cn"
21
//從位置處抓取字串
# expr substr "yangzhigang.cublog.cn"
1 11
yangzhigang
//字串開(kāi)始處
# expr index
"yangzhigang.cublog.cn" cu
13
3)dc
用dc來(lái)進(jìn)行計(jì)算的人可以不多,因?yàn)閐c與bc相比要復(fù)雜,但是在進(jìn)行簡(jiǎn)單的計(jì)劃時(shí),是差不多的,不算難。dc為壓棧操作,默認(rèn)也是交互的,但
也可以用echo和|來(lái)配合打算。
如:
# dc
3
2+
p
5
4*
p
20
quit
# echo 3 2+ 4* p |dc
20
4)echo
echo用來(lái)進(jìn)行回顯,是周知的事。上面也配合bc來(lái)進(jìn)行計(jì)算。其實(shí)echo也可以單獨(dú)進(jìn)行簡(jiǎn)單的計(jì)算,如:
# echo $((3+5))
8
# echo $(((3+5)*2))
16
echo還可以進(jìn)行變量的計(jì)算,如:
# a=10
# b=5
# echo $(($a+$b))
15
# echo $a+$b
10+5
# echo $a+$b |bc
15
//計(jì)算前天的日期
#? echo `date
+%Y%m%d`
20090813
#? echo `date +%Y%m%d`-2
20090813-2
#? echo `date +%Y%m%d`-2
|bc
20090811
5)AWK
awk在處理文件的時(shí),可以進(jìn)行運(yùn)算,那當(dāng)然也可以單單用來(lái)計(jì)算了,如:
# awk 'BEGIN{a=3+2;print
a}'
5
# awk 'BEGIN{a=(3+2)*2;print
a}'
10
Awk 支持常見(jiàn)的運(yùn)算符, 如 + (加),- (減), * (乘), / (除), ^ 或 ** (乘方), % (取模)
等等。 此外, awk 也提供了一些常用的數(shù)學(xué)函數(shù), 比如 sin(x), cos(x), exp(x), log(x),
sqrt(x), rand()。 使用這些運(yùn)算符和函數(shù)可以直接進(jìn)行一些簡(jiǎn)單的運(yùn)算:
# echo | awk '{print
8+6}'
14
# echo | awk '{print
8/6}'
1.33333
# echo | awk '{print
9%5}'
4
請(qǐng)放心使用
有問(wèn)題的話請(qǐng)追問(wèn)
滿意請(qǐng)及時(shí)采納,謝謝
方法一
第一步:使用
top命令,然后按shift+p按照CPU排序
找到占用CPU過(guò)高的進(jìn)程的pid
第二步:使用
top -H -p [進(jìn)程id]
找到進(jìn)程中消耗資源最高的線程的id
第三步:使用
echo 'obase=16;[線程id]' | bc或者printf "%x\n" [線程id]?
將線程id轉(zhuǎn)換為16進(jìn)制(字母要小寫(xiě))
bc是linux的計(jì)算器命令
第四步:執(zhí)行
jstack [進(jìn)程id] |grep -A 10 [線程id的16進(jìn)制]”
查看線程狀態(tài)信息
方法二
第一步:使用
top命令,然后按shift+p按照CPU排序
找到占用CPU過(guò)高的進(jìn)程
第二步:使用
ps -mp pid -o THREAD,tid,time | sort -rn
獲取線程信息,并找到占用CPU高的線程
第三步:使用
echo 'obase=16;[線程id]' | bc或者printf "%x\n" [線程id]
將需要的線程ID轉(zhuǎn)換為16進(jìn)制格式
第四步:使用
jstack pid |grep tid -A 30 [線程id的16進(jìn)制]
打印線程的堆棧信息
案例分析
場(chǎng)景描述
生產(chǎn)環(huán)境下JAVA進(jìn)程高CPU占用故障排查
解決過(guò)程
1、根據(jù)top命令,發(fā)現(xiàn)PID為2633的Java進(jìn)程占用CPU高達(dá)300%,出現(xiàn)故障。
2、找到該進(jìn)程后,如何定位具體線程或代碼呢,首先顯示線程列表,并按照CPU占用高的線程排序:
1
[root@localhost ~]# ps -mp 2633 -o THREAD,tid,time | sort -rn
顯示結(jié)果如下:
找到了耗時(shí)最高的線程(TID)3626,占用CPU時(shí)間有12分鐘了!
3、將需要的線程TID轉(zhuǎn)換為16進(jìn)制格式
12
[root@localhost ~]# printf "%x\n" 3626e18
4、最后使用jstack命令打印出該進(jìn)程下面的此線程的堆棧信息:
1
[root@localhost ~]# jstack 2633 |grep "e18" -A 30
相比故障的解決而言,發(fā)現(xiàn)故障也同等的重要!市場(chǎng)上的大多數(shù)監(jiān)控軟件都能實(shí)現(xiàn)服務(wù)器負(fù)載的實(shí)時(shí)觀測(cè),比如:Zabbix、Nagios、阿里云監(jiān)控(針對(duì)云服務(wù)器)等。但是當(dāng)中大部分的軟件都需要運(yùn)維同學(xué)主動(dòng)去設(shè)置規(guī)則或者檢測(cè)才能發(fā)現(xiàn)問(wèn)題,如何被動(dòng)的也能收到告警呢?
推薦大家一個(gè)實(shí)用的運(yùn)維軟件——王教授,對(duì)于業(yè)務(wù)部署在阿里云上的用戶,只需綁定需要監(jiān)控的只讀AcessKey,即可將云上資源的告警信息及時(shí)通知給對(duì)應(yīng)的團(tuán)隊(duì)成員。
化主動(dòng)為被動(dòng)的方式,一方面減輕了運(yùn)維工程師的工作,另一方面也減小了運(yùn)維漏看或者忽略告警的情況發(fā)生。
Linux服務(wù)器上出現(xiàn)CPU負(fù)載達(dá)到100%居高不下的情況,如果CPU 持續(xù)跑高,則會(huì)影響業(yè)務(wù)系統(tǒng)的正常運(yùn)行; CPU利用率。根據(jù)經(jīng)驗(yàn)來(lái)看,用戶空間進(jìn)程占用CPU比例在 65-70%。一般不能超過(guò)這個(gè)比例,超過(guò)這個(gè)比例,系統(tǒng)性能就會(huì)降低,平均負(fù)載升高,這點(diǎn)將會(huì)在下面的測(cè)試中看到。
進(jìn)程上下文切換。上下文切換和CPU利用率應(yīng)該聯(lián)系起來(lái),如果CPU利用率低,那么上下文切換稍高點(diǎn)也能接受。上下文切換也是需要消耗CPU資源的,頻繁的切換必將使得CPU利用率升高。
運(yùn)行隊(duì)列中等待運(yùn)行的進(jìn)程數(shù)。每個(gè)CPU核心中等待處理的進(jìn)程數(shù)不應(yīng)該超過(guò)3個(gè)線程/進(jìn)程。如4核心的機(jī)器,那么隊(duì)列的最大值應(yīng)該不超過(guò)12個(gè)。
對(duì)于CPU過(guò)載問(wèn)題通常使用以下兩種方式即可快速定位(不能涵蓋所有特殊情況,請(qǐng)作為其中的參考排查思路):
一、排查分析
方法一(針對(duì)JAVA應(yīng)用):
第一步:使用
top命令,然后按shift+p按照CPU排序
找到占用CPU過(guò)高的進(jìn)程的pid
第二步:使用
top -H -p [進(jìn)程id]
找到進(jìn)程中消耗資源最高的線程的id
第三步:使用
echo 'obase=16;[線程id]' | bc或者printf "%x\n" [線程id]
將線程id轉(zhuǎn)換為16進(jìn)制(字母要小寫(xiě))
bc是linux的計(jì)算器命令
第四步(此步驟可以和相對(duì)應(yīng)的java開(kāi)發(fā)進(jìn)行一起排查):執(zhí)行
jstack [進(jìn)程id] |grep -A 10 [線程id的16進(jìn)制]”
查看線程狀態(tài)信息
二、kswapd0 進(jìn)程占用 CPU 較高
操作系統(tǒng)都用分頁(yè)機(jī)制來(lái)管理物理內(nèi)存,操作系統(tǒng)將磁盤(pán)的一部分劃出來(lái)作為虛擬內(nèi)存,由于內(nèi)存的速度要比磁盤(pán)快得多,所以操作系統(tǒng)要按照某種換頁(yè)機(jī)制將不需要的頁(yè)面換到磁盤(pán)中,將需要的頁(yè)面調(diào)到內(nèi)存中,由于內(nèi)存持續(xù)不足,這個(gè)換頁(yè)動(dòng)作持續(xù)進(jìn)行,kswapd0 是虛擬內(nèi)存管理中負(fù)責(zé)換頁(yè)的,當(dāng)服務(wù)器內(nèi)存不足的時(shí)候 kswapd0 會(huì)執(zhí)行換頁(yè)操作,這個(gè)換頁(yè)操作是十分消耗主機(jī) CPU 資源的。如果通過(guò) top 發(fā)現(xiàn)該進(jìn)程持續(xù)處于非睡眠狀態(tài),且運(yùn)行時(shí)間較長(zhǎng),可以初步判定系統(tǒng)在持續(xù)的進(jìn)行換頁(yè)操作,可以將問(wèn)題轉(zhuǎn)向內(nèi)存不足的原因來(lái)排查。
當(dāng)前名稱:Linux命令obase 創(chuàng)建目錄Linux命令
文章位置:http://www.chinadenli.net/article2/dooihic.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站、網(wǎng)站改版、網(wǎng)站維護(hù)、網(wǎng)站排名、標(biāo)簽優(yōu)化、靜態(tài)網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)