<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          Java 開(kāi)發(fā)常用的 Linux 命令知識(shí)積累

          共 5991字,需瀏覽 12分鐘

           ·

          2022-05-25 09:32

          來(lái)源 |?siye1982.github.io/2016/02/25/linux-list/

          • 寫(xiě)在前面
          • 基本操作
          • Linux關(guān)機(jī),重啟
          • 查看系統(tǒng),CPU信息
          • 建立軟連接
          • rpm相關(guān)
          • sshkey
          • 命令重命名
          • 同步服務(wù)器時(shí)間
          • 后臺(tái)運(yùn)行命令
          • 強(qiáng)制活動(dòng)用戶(hù)退出
          • 查看命令路徑
          • 查看進(jìn)程所有打開(kāi)最大fd數(shù)
          • 配置dns
          • nslookup,查看域名路由表
          • last, 最近登錄信息列表
          • 設(shè)置固定ip
          • 查看進(jìn)程內(nèi)加載的環(huán)境變量
          • 查看進(jìn)程樹(shù)找到服務(wù)器進(jìn)程
          • 查看進(jìn)程啟動(dòng)路徑
          • 添加用戶(hù), 配置sudo權(quán)限
          • 強(qiáng)制關(guān)閉進(jìn)程名包含xxx的所有進(jìn)程
          • vim操作
          • 打開(kāi)只讀文件,修改后需要保存時(shí)(不用切換用戶(hù)即可保存的方式)
          • 查看磁盤(pán), 文件目錄基本信息
          • wc命令
          • 常用壓縮, 解壓縮命令
            • 壓縮命令
            • 解壓縮命令
          • 變更文件所屬用戶(hù), 用戶(hù)組
          • cp, scp, mkdir
          • 比較兩個(gè)文件
          • 日志輸出的字節(jié)數(shù),可以用作性能測(cè)試
          • 查看, 去除特殊字符
          • 處理因系統(tǒng)原因引起的文件中特殊字符的問(wèn)題
          • tee, 重定向的同時(shí)輸出到屏幕
          • grep
          • awk
          • find檢索命令
          • 查看什么進(jìn)程使用了該端口
          • 獲取本機(jī)ip地址
          • iptables
          • nc命令, tcp調(diào)試?yán)?/section>
          • tcpdump
          • 跟蹤網(wǎng)絡(luò)路由路徑
          • ss
          • netstat
          • top
          • dmesg,查看系統(tǒng)日志
          • iostat,磁盤(pán)IO情況監(jiān)控
          • free,內(nèi)存使用情況
          • sar,查看網(wǎng)絡(luò)吞吐?tīng)顟B(tài)
          • vmstat, 給定時(shí)間監(jiān)控CPU使用率, 內(nèi)存使用, 虛擬內(nèi)存交互, IO讀寫(xiě)

          寫(xiě)在前面

          雖然平時(shí)大部分工作都是和Java相關(guān)的開(kāi)發(fā), 但是每天都會(huì)接觸Linux系統(tǒng), 尤其是使用了Mac之后, 每天都是工作在黑色背景的命令行環(huán)境中. 自己記憶力不好, 很多有用的Linux命令不能很好的記憶, 現(xiàn)在逐漸總結(jié)一下, 以便后續(xù)查看.

          基本操作

          Linux關(guān)機(jī),重啟

          #?關(guān)機(jī)
          shutdown?-h?now

          #?重啟
          shutdown?-r?now

          查看系統(tǒng),CPU信息

          #?查看系統(tǒng)內(nèi)核信息
          uname?-a

          #?查看系統(tǒng)內(nèi)核版本
          cat?/proc/version

          #?查看當(dāng)前用戶(hù)環(huán)境變量
          env

          cat?/proc/cpuinfo

          #?查看有幾個(gè)邏輯cpu,?包括cpu型號(hào)
          cat?/proc/cpuinfo?|?grep?name?|?cut?-f2?-d:?|?uniq?-c

          #?查看有幾顆cpu,每顆分別是幾核
          cat?/proc/cpuinfo?|?grep?physical?|?uniq?-c

          #?查看當(dāng)前CPU運(yùn)行在32bit還是64bit模式下,?如果是運(yùn)行在32bit下也不代表CPU不支持64bit
          getconf?LONG_BIT

          #?結(jié)果大于0,?說(shuō)明支持64bit計(jì)算.?lm指long?mode,?支持lm則是64bit
          cat?/proc/cpuinfo?|?grep?flags?|?grep?'?lm?'?|?wc?-l

          建立軟連接

          ln?-s?/usr/local/jdk1.8/?jdk

          rpm相關(guān)

          #?查看是否通過(guò)rpm安裝了該軟件
          rpm?-qa?|?grep?軟件名

          sshkey

          #?創(chuàng)建sshkey
          [email protected]

          #id_rsa.pub?的內(nèi)容拷貝到要控制的服務(wù)器的?home/username/.ssh/authorized_keys?中,如果沒(méi)有則新建(.ssh權(quán)限為700,?authorized_keys權(quán)限為600)

          命令重命名

          #?在各個(gè)用戶(hù)的.bash_profile中添加重命名配置
          alias?ll='ls?-alF'

          同步服務(wù)器時(shí)間

          sudo?ntpdate?-u?ntp.api.bz

          后臺(tái)運(yùn)行命令

          #?后臺(tái)運(yùn)行,并且有nohup.out輸出
          nohup?xxx?&

          #?后臺(tái)運(yùn)行,?不輸出任何日志
          nohup?xxx?>?/dev/null?&

          #?后臺(tái)運(yùn)行,?并將錯(cuò)誤信息做標(biāo)準(zhǔn)輸出到日志中?
          nohup?xxx?>out.log?2>&1?&

          強(qiáng)制活動(dòng)用戶(hù)退出

          #?命令來(lái)完成強(qiáng)制活動(dòng)用戶(hù)退出.其中TTY表示終端名稱(chēng)
          pkill?-kill?-t?[TTY]

          查看命令路徑

          which?<命令>

          查看進(jìn)程所有打開(kāi)最大fd數(shù)

          ulimit?-n

          配置dns

          vim?/etc/resolv.conf

          nslookup,查看域名路由表

          nslookup?google.com

          last, 最近登錄信息列表

          #?最近登錄的5個(gè)賬號(hào)
          last?-n?5

          設(shè)置固定ip

          搜索公縱號(hào):MarkerHub,關(guān)注回復(fù)[?vue?]獲取前后端入門(mén)教程!

          ifconfig?em1??192.168.5.177?netmask?255.255.255.0

          查看進(jìn)程內(nèi)加載的環(huán)境變量

          #?也可以去?cd?/proc?目錄下,?查看進(jìn)程內(nèi)存中加載的東西
          ps?eww?-p??XXXXX(進(jìn)程號(hào))

          查看進(jìn)程樹(shù)找到服務(wù)器進(jìn)程

          ps?auwxf

          查看進(jìn)程啟動(dòng)路徑

          cd?/proc/xxx(進(jìn)程號(hào))
          ls?-all
          #?cwd對(duì)應(yīng)的是啟動(dòng)路徑

          添加用戶(hù), 配置sudo權(quán)限

          #?新增用戶(hù)
          useradd?用戶(hù)名
          passwd?用戶(hù)名

          #增加sudo權(quán)限
          vim?/etc/sudoers
          #?修改文件里面的
          #?root????ALL=(ALL)???????ALL
          #?用戶(hù)名?ALL=(ALL)???????ALL

          強(qiáng)制關(guān)閉進(jìn)程名包含xxx的所有進(jìn)程

          ps?aux|grep?xxx?|?grep?-v?grep?|?awk?'{print?$2}'?|?xargs?kill?-9

          磁盤(pán),文件,目錄相關(guān)操作

          vim操作

          #normal模式下?g表示全局,?x表示查找的內(nèi)容,?y表示替換后的內(nèi)容
          :%s/x/y/g
          ?
          #normal模式下
          0??#?光標(biāo)移到行首(數(shù)字0)
          $??#?光標(biāo)移至行尾
          shift?+?g?#?跳到文件最后
          gg?#?跳到文件頭
          ?
          #?顯示行號(hào)
          :set?nu
          ?
          #?去除行號(hào)
          :set?nonu
          ?
          #?檢索
          /xxx(檢索內(nèi)容)??#?從頭檢索,?按n查找下一個(gè)
          ?xxx(檢索內(nèi)容)??#?從尾部檢索

          打開(kāi)只讀文件,修改后需要保存時(shí)(不用切換用戶(hù)即可保存的方式)

          #?在normal模式下
          :w?!sudo?tee?%

          查看磁盤(pán), 文件目錄基本信息

          #?查看磁盤(pán)掛載情況
          mount

          #?查看磁盤(pán)分區(qū)信息
          df

          #?查看目錄及子目錄大小
          du?-H?-h

          #?查看當(dāng)前目錄下各個(gè)文件,?文件夾占了多少空間,?不會(huì)遞歸
          du?-sh?*

          wc命令

          #?查看文件里有多少行
          wc?-l?filename
          ?
          #?看文件里有多少個(gè)word
          wc?-w?filename

          #?文件里最長(zhǎng)的那一行是多少個(gè)字
          wc?-L?filename

          #?統(tǒng)計(jì)字節(jié)數(shù)
          wc?-c

          常用壓縮, 解壓縮命令

          壓縮命令

          tar?czvf?xxx.tar?壓縮目錄
          ?
          zip?-r?xxx.zip?壓縮目錄

          解壓縮命令

          tar?zxvf?xxx.tar
          ?
          #?解壓到指定文件夾
          tar?zxvf?xxx.tar?-C?/xxx/yyy/
          ?
          unzip?xxx.zip

          變更文件所屬用戶(hù), 用戶(hù)組

          chown?eagleye.eagleye?xxx.log

          cp, scp, mkdir

          #復(fù)制
          cp?xxx.log

          #?復(fù)制并強(qiáng)制覆蓋同名文件
          cp?-f?xxx.log

          #?復(fù)制文件夾
          cp?-r?xxx(源文件夾)?yyy(目標(biāo)文件夾)

          #?遠(yuǎn)程復(fù)制
          scp?-P?ssh端口[email protected]:/home/username/xxx?/home/xxx

          #?級(jí)聯(lián)創(chuàng)建目錄
          mkdir?-p?/xxx/yyy/zzz

          #?批量創(chuàng)建文件夾,?會(huì)在test,main下都創(chuàng)建java,?resources文件夾
          mkdir?-p?src/{test,main}/{java,resources}

          比較兩個(gè)文件

          diff?-u?1.txt?2.txt

          日志輸出的字節(jié)數(shù),可以用作性能測(cè)試

          #?如果做性能測(cè)試,?可以每執(zhí)行一次,?往日志里面輸出?“.”?,?這樣日志中的字節(jié)數(shù)就是實(shí)際的性能測(cè)試運(yùn)行的次數(shù),?還可以看見(jiàn)實(shí)時(shí)速率.
          tail?-f?xxx.log?|?pv?-bt

          查看, 去除特殊字符

          #?查看特殊字符
          cat?-v?xxx.sh

          #?去除特殊字符
          sed?-i?'s/^M//g’?env.sh??去除文件的特殊字符,?比如^M:??需要這樣輸入:?ctrl+v+enter

          處理因系統(tǒng)原因引起的文件中特殊字符的問(wèn)題

          #?可以轉(zhuǎn)換為該系統(tǒng)下的文件格式
          cat?file.sh?>?file.sh_bak

          #?先將file.sh中文件內(nèi)容復(fù)制下來(lái)然后運(yùn)行,?然后粘貼內(nèi)容,?最后ctrl?+?d?保存退出
          cat?>?file1.sh

          #?在vim中通過(guò)如下設(shè)置文件編碼和文件格式
          :set?fileencodings=utf-8?,然后?w?(存盤(pán))一下即可轉(zhuǎn)化為?utf8?格式,
          :set?fileformat=unix

          #?在mac下使用dos2unix進(jìn)行文件格式化
          find?.?-name?"*.sh"?|?xargs?dos2unix

          tee, 重定向的同時(shí)輸出到屏幕

          awk?‘{print?$0}’?xxx.log?|?tee?test.log

          檢索相關(guān)

          grep

          #?反向匹配,?查找不包含xxx的內(nèi)容
          grep?-v?xxx

          #?排除所有空行
          grep?-v?'^$'

          #?返回結(jié)果?2,則說(shuō)明第二行是空行
          grep?-n?“^$”?111.txt????

          #?查詢(xún)以abc開(kāi)頭的行
          grep?-n?“^abc”?111.txt?

          #?同時(shí)列出該詞語(yǔ)出現(xiàn)在文章的第幾行
          grep?'xxx'?-n?xxx.log

          #?計(jì)算一下該字串出現(xiàn)的次數(shù)
          grep?'xxx'?-c?xxx.log

          #?比對(duì)的時(shí)候,不計(jì)較大小寫(xiě)的不同
          grep?'xxx'?-i?xxx.log

          awk

          #?以':'?為分隔符,如果第五域有user則輸出該行
          awk?-F?':'?'{if?($5?~?/user/)?print?$0}'?/etc/passwd?

          #?統(tǒng)計(jì)單個(gè)文件中某個(gè)字符(串)(中文無(wú)效)出現(xiàn)的次數(shù)
          awk?-v?RS='character'?'END?{print?--NR}'?xxx.txt

          find檢索命令

          #?在目錄下找后綴是.mysql的文件
          find?/home/eagleye?-name?'*.mysql'?-print

          #?會(huì)從?/usr 目錄開(kāi)始往下找,找最近3天之內(nèi)存取過(guò)的文件。
          find?/usr?-atime?3?–print
          ??
          #?會(huì)從?/usr 目錄開(kāi)始往下找,找最近5天之內(nèi)修改過(guò)的文件。
          find?/usr?-ctime?5?–print

          #?會(huì)從?/doc 目錄開(kāi)始往下找,找jacky 的、文件名開(kāi)頭是 j的文件。??
          find?/doc?-user?jacky?-name?'j*'?–print

          #?會(huì)從?/doc 目錄開(kāi)始往下找,找尋文件名是 ja 開(kāi)頭或者 ma開(kāi)頭的文件。
          find?/doc?\(?-name?'ja*'?-o-?-name?'ma*'?\)?–print

          #??會(huì)從?/doc 目錄開(kāi)始往下找,找到凡是文件名結(jié)尾為 bak的文件,把它刪除掉。-exec 選項(xiàng)是執(zhí)行的意思,rm 是刪除命令,{?}?表示文件名,“\;”是規(guī)定的命令結(jié)尾。?
          find?/doc?-name?'*bak'?-exec?rm?{}?\;

          網(wǎng)絡(luò)相關(guān)

          查看什么進(jìn)程使用了該端口

          lsof?-i:port

          獲取本機(jī)ip地址

          /sbin/ifconfig?-a|grep?inet|grep?-v?127.0.0.1|grep?-v?inet6|awk?'{print?$2}'|tr?-d?"addr:"

          iptables

          #?查看iptables狀態(tài)
          service?iptables?status

          #?要封停一個(gè)ip
          iptables?-I?INPUT?-s?***.***.***.***?-j?DROP

          #?要解封一個(gè)IP,使用下面這條命令:
          iptables?-D?INPUT?-s?***.***.***.***?-j?DROP

          備注:?參數(shù)-I是表示Insert(添加),-D表示Delete(刪除)。后面跟的是規(guī)則,INPUT表示入站,***.***.***.***表示要封停的IP,DROP表示放棄連接。

          #開(kāi)啟9090端口的訪(fǎng)問(wèn)
          /sbin/iptables?-I?INPUT?-p?tcp?--dport?9090?-j?ACCEPT?

          #?防火墻開(kāi)啟、關(guān)閉、重啟
          /etc/init.d/iptables?status
          /etc/init.d/iptables?start
          /etc/init.d/iptables?stop
          /etc/init.d/iptables?restart

          nc命令, tcp調(diào)試?yán)?/h2>
          #給某一個(gè)endpoint發(fā)送TCP請(qǐng)求,就將data的內(nèi)容發(fā)送到對(duì)端
          nc?192.168.0.11?8000?
          #nc可以當(dāng)做服務(wù)器,監(jiān)聽(tīng)某個(gè)端口號(hào),把某一次請(qǐng)求的內(nèi)容存儲(chǔ)到received_data里
          nc?-l?8000?>?received_data

          #上邊只監(jiān)聽(tīng)一次,如果多次可以加上-k參數(shù)
          nc?-lk?8000

          tcpdump

          #?dump出本機(jī)12301端口的tcp包
          tcpdump?-i?em1?tcp?port?12301?-s?1500?-w?abc.pcap

          跟蹤網(wǎng)絡(luò)路由路徑

          #?traceroute默認(rèn)使用udp方式,?如果是-I則改成icmp方式
          traceroute?-I?www.163.com

          #?從ttl第3跳跟蹤
          traceroute?-M?3?www.163.com??

          #?加上端口跟蹤
          traceroute?-p?8080?192.168.10.11

          ss

          #?顯示本地打開(kāi)的所有端口
          ss?-l?
          ?
          #?顯示每個(gè)進(jìn)程具體打開(kāi)的socket
          ss?-pl?
          ?
          #?顯示所有tcp?socket
          ss?-t?-a?
          ?
          #?顯示所有的UDP?Socekt
          ss?-u?-a?
          ?
          #?顯示所有已建立的SMTP連接
          ss?-o?state?established?'(?dport?=?:smtp?or?sport?=?:smtp?)'??
          ?
          #?顯示所有已建立的HTTP連接?
          ss?-o?state?established?'(?dport?=?:http?or?sport?=?:http?)'??
          ?
          找出所有連接X(jué)服務(wù)器的進(jìn)程
          ss?-x?src?/tmp/.X11-unix/*??
          ?
          列出當(dāng)前socket統(tǒng)計(jì)信息
          ss?-s?
          ?
          解釋?zhuān)簄etstat是遍歷/proc下面每個(gè)PID目錄,ss直接讀/proc/net下面的統(tǒng)計(jì)信息。所以ss執(zhí)行的時(shí)候消耗資源以及消耗的時(shí)間都比netstat少很多

          netstat

          #?輸出每個(gè)ip的連接數(shù),以及總的各個(gè)狀態(tài)的連接數(shù)
          netstat?-n?|?awk?'/^tcp/?{n=split($(NF-1),array,":");if(n<=2)++S[array[(1)]];else++S[array[(4)]];++s[$NF];++N}?END?{for(a?in?S){printf("%-20s?%s\n",?a,?S[a]);++I}printf("%-20s?%s\n","TOTAL_IP",I);for(a?in?s)?printf("%-20s?%s\n",a,?s[a]);printf("%-20s?%s\n","TOTAL_LINK",N);}'

          #?統(tǒng)計(jì)所有連接狀態(tài),?
          # CLOSED:無(wú)連接是活動(dòng)的或正在進(jìn)行
          # LISTEN:服務(wù)器在等待進(jìn)入呼叫
          # SYN_RECV:一個(gè)連接請(qǐng)求已經(jīng)到達(dá),等待確認(rèn)
          # SYN_SENT:應(yīng)用已經(jīng)開(kāi)始,打開(kāi)一個(gè)連接
          # ESTABLISHED:正常數(shù)據(jù)傳輸狀態(tài)
          # FIN_WAIT1:應(yīng)用說(shuō)它已經(jīng)完成
          # FIN_WAIT2:另一邊已同意釋放
          # ITMED_WAIT:等待所有分組死掉
          # CLOSING:兩邊同時(shí)嘗試關(guān)閉
          # TIME_WAIT:主動(dòng)關(guān)閉連接一端還沒(méi)有等到另一端反饋期間的狀態(tài)
          # LAST_ACK:等待所有分組死掉
          netstat?-n?|?awk?'/^tcp/?{++state[$NF]}?END?{for(key?in?state)?print?key,"\t",state[key]}'

          #?查找較多time_wait連接
          netstat?-n|grep?TIME_WAIT|awk?'{print?$5}'|sort|uniq?-c|sort?-rn|head?-n20

          監(jiān)控linux性能命令

          top

          按大寫(xiě)的 F 或 O 鍵,然后按 a-z 可以將進(jìn)程按照相應(yīng)的列進(jìn)行排序, 然后回車(chē)。而大寫(xiě)的 R 鍵可以將當(dāng)前的排序倒轉(zhuǎn)
          列名含義
          PID進(jìn)程id
          PPID父進(jìn)程id
          RUSERReal user name
          UID進(jìn)程所有者的用戶(hù)id
          USER進(jìn)程所有者的用戶(hù)名
          GROUP進(jìn)程所有者的組名
          TTY啟動(dòng)進(jìn)程的終端名。不是從終端啟動(dòng)的進(jìn)程則顯示為 ?
          PR優(yōu)先級(jí)
          NInice值。負(fù)值表示高優(yōu)先級(jí),正值表示低優(yōu)先級(jí)
          P最后使用的CPU,僅在多CPU環(huán)境下有意義
          %CPU上次更新到現(xiàn)在的CPU時(shí)間占用百分比
          TIME進(jìn)程使用的CPU時(shí)間總計(jì),單位秒
          TIME+進(jìn)程使用的CPU時(shí)間總計(jì),單位1/100秒
          %MEM進(jìn)程使用的物理內(nèi)存百分比
          VIRT進(jìn)程使用的虛擬內(nèi)存總量,單位kb。VIRT=SWAP+RES
          SWAP進(jìn)程使用的虛擬內(nèi)存中,被換出的大小,單位kb。
          RES進(jìn)程使用的、未被換出的物理內(nèi)存大小,單位kb。RES=CODE+DATA
          CODE可執(zhí)行代碼占用的物理內(nèi)存大小,單位kb
          DATA可執(zhí)行代碼以外的部分(數(shù)據(jù)段+棧)占用的物理內(nèi)存大小,單位kb
          SHR共享內(nèi)存大小,單位kb
          nFLT頁(yè)面錯(cuò)誤次數(shù)
          nDRT最后一次寫(xiě)入到現(xiàn)在,被修改過(guò)的頁(yè)面數(shù)。
          S進(jìn)程狀態(tài)。D=不可中斷的睡眠狀態(tài),R=運(yùn)行,S=睡眠,T=跟蹤/停止,Z=僵尸進(jìn)程
          COMMAND命令名/命令行
          WCHAN若該進(jìn)程在睡眠,則顯示睡眠中的系統(tǒng)函數(shù)名
          Flags任務(wù)標(biāo)志,參考 sched.h

          dmesg,查看系統(tǒng)日志

          dmesg

          iostat,磁盤(pán)IO情況監(jiān)控

          iostat?-xz?1
          ?
          # r/s, w/s, rkB/s, wkB/s:分別表示每秒讀寫(xiě)次數(shù)和每秒讀寫(xiě)數(shù)據(jù)量(千字節(jié))。讀寫(xiě)量過(guò)大,可能會(huì)引起性能問(wèn)題。
          # await:IO操作的平均等待時(shí)間,單位是毫秒。這是應(yīng)用程序在和磁盤(pán)交互時(shí),需要消耗的時(shí)間,包括IO等待和實(shí)際操作的耗時(shí)。如果這個(gè)數(shù)值過(guò)大,可能是硬件設(shè)備遇到了瓶頸或者出現(xiàn)故障。
          # avgqu-sz:向設(shè)備發(fā)出的請(qǐng)求平均數(shù)量。如果這個(gè)數(shù)值大于1,可能是硬件設(shè)備已經(jīng)飽和(部分前端硬件設(shè)備支持并行寫(xiě)入)。
          #?%util:設(shè)備利用率。這個(gè)數(shù)值表示設(shè)備的繁忙程度,經(jīng)驗(yàn)值是如果超過(guò)60,可能會(huì)影響IO性能(可以參照IO操作平均等待時(shí)間)。如果到達(dá)100%,說(shuō)明硬件設(shè)備已經(jīng)飽和。
          #?如果顯示的是邏輯設(shè)備的數(shù)據(jù),那么設(shè)備利用率不代表后端實(shí)際的硬件設(shè)備已經(jīng)飽和。值得注意的是,即使IO性能不理想,也不一定意味這應(yīng)用程序性能會(huì)不好,可以利用諸如預(yù)讀取、寫(xiě)緩存等策略提升應(yīng)用性能。

          free,內(nèi)存使用情況

          free?-m
          ?
          eg:
          ?
          ?????total???????used???????free?????shared????buffers?????cached
          Mem:??????????1002????????769????????232??????????0?????????62????????421
          -/+?buffers/cache:??????????286????????715
          Swap:??????????1153??????????0???????1153
          ?
          第一部分Mem行:
          total?內(nèi)存總數(shù):?1002M
          used?已經(jīng)使用的內(nèi)存數(shù):?769M
          free?空閑的內(nèi)存數(shù):?232M
          shared?當(dāng)前已經(jīng)廢棄不用,總是0
          buffers?Buffer?緩存內(nèi)存數(shù):?62M
          cached?Page?緩存內(nèi)存數(shù):421M
          ?
          關(guān)系:total(1002M)?= used(769M)?+ free(232M)
          ?
          第二部分(-/+?buffers/cache):
          (-buffers/cache) used內(nèi)存數(shù):286M (指的第一部分Mem行中的used – buffers – cached)
          (+buffers/cache)?free內(nèi)存數(shù):?715M?(指的第一部分Mem行中的free?+?buffers?+?cached)
          ?
          可見(jiàn)-buffers/cache反映的是被程序?qū)崒?shí)在在吃掉的內(nèi)存,而+buffers/cache反映的是可以挪用的內(nèi)存總數(shù).
          ?
          第三部分是指交換分區(qū)

          sar,查看網(wǎng)絡(luò)吞吐?tīng)顟B(tài)

          # sar命令在這里可以查看網(wǎng)絡(luò)設(shè)備的吞吐率。在排查性能問(wèn)題時(shí),可以通過(guò)網(wǎng)絡(luò)設(shè)備的吞吐量,判斷網(wǎng)絡(luò)設(shè)備是否已經(jīng)飽和
          sar?-n?DEV?1
          ?
          #
          # sar命令在這里用于查看TCP連接狀態(tài),其中包括:
          # active/s:每秒本地發(fā)起的TCP連接數(shù),既通過(guò)connect調(diào)用創(chuàng)建的TCP連接;
          # passive/s:每秒遠(yuǎn)程發(fā)起的TCP連接數(shù),即通過(guò)accept調(diào)用創(chuàng)建的TCP連接;
          # retrans/s:每秒TCP重傳數(shù)量;
          # TCP連接數(shù)可以用來(lái)判斷性能問(wèn)題是否由于建立了過(guò)多的連接,進(jìn)一步可以判斷是主動(dòng)發(fā)起的連接,還是被動(dòng)接受的連接。TCP重傳可能是因?yàn)榫W(wǎng)絡(luò)環(huán)境惡劣,或者服務(wù)器壓力過(guò)大導(dǎo)致丟包
          sar?-n?TCP,ETCP?1

          vmstat, 給定時(shí)間監(jiān)控CPU使用率, 內(nèi)存使用, 虛擬內(nèi)存交互, IO讀寫(xiě)

          #?2表示每2秒采集一次狀態(tài)信息,?1表示只采集一次(忽略既是一直采集)
          vmstat?2?1
          ?
          eg:
          r?b?swpd?free?buff?cache?si?so?bi?bo?in?cs?us?sy?id?wa
          1?0?0?3499840?315836?3819660?0?0?0?1?2?0?0?0?100?0
          0?0?0?3499584?315836?3819660?0?0?0?0?88?158?0?0?100?0
          0?0?0?3499708?315836?3819660?0?0?0?2?86?162?0?0?100?0
          0?0?0?3499708?315836?3819660?0?0?0?10?81?151?0?0?100?0
          1?0?0?3499732?315836?3819660?0?0?0?2?83?154?0?0?100?0
          • r 表示運(yùn)行隊(duì)列(就是說(shuō)多少個(gè)進(jìn)程真的分配到CPU),我測(cè)試的服務(wù)器目前CPU比較空閑,沒(méi)什么程序在跑,當(dāng)這個(gè)值超過(guò)了CPU數(shù)目,就會(huì)出現(xiàn)CPU瓶頸了。這個(gè)也和top的負(fù)載有關(guān)系,一般負(fù)載超過(guò)了3就比較高,超過(guò)了5就高,超過(guò)了10就不正常了,服務(wù)器的狀態(tài)很危險(xiǎn)。top的負(fù)載類(lèi)似每秒的運(yùn)行隊(duì)列。如果運(yùn)行隊(duì)列過(guò)大,表示你的CPU很繁忙,一般會(huì)造成CPU使用率很高。
          • b 表示阻塞的進(jìn)程,這個(gè)不多說(shuō),進(jìn)程阻塞,大家懂的。
          • swpd 虛擬內(nèi)存已使用的大小,如果大于0,表示你的機(jī)器物理內(nèi)存不足了,如果不是程序內(nèi)存泄露的原因,那么你該升級(jí)內(nèi)存了或者把耗內(nèi)存的任務(wù)遷移到其他機(jī)器。
          • free 空閑的物理內(nèi)存的大小,我的機(jī)器內(nèi)存總共8G,剩余3415M。
          • buff Linux/Unix系統(tǒng)是用來(lái)存儲(chǔ),目錄里面有什么內(nèi)容,權(quán)限等的緩存,我本機(jī)大概占用300多M
          • cache cache直接用來(lái)記憶我們打開(kāi)的文件,給文件做緩沖,我本機(jī)大概占用300多M(這里是Linux/Unix的聰明之處,把空閑的物理內(nèi)存的一部分拿來(lái)做文件和目錄的緩存,是為了提高 程序執(zhí)行的性能,當(dāng)程序使用內(nèi)存時(shí),buffer/cached會(huì)很快地被使用。)
          • si 每秒從磁盤(pán)讀入虛擬內(nèi)存的大小,如果這個(gè)值大于0,表示物理內(nèi)存不夠用或者內(nèi)存泄露了,要查找耗內(nèi)存進(jìn)程解決掉。我的機(jī)器內(nèi)存充裕,一切正常。
          • so 每秒虛擬內(nèi)存寫(xiě)入磁盤(pán)的大小,如果這個(gè)值大于0,同上。
          • bi 塊設(shè)備每秒接收的塊數(shù)量,這里的塊設(shè)備是指系統(tǒng)上所有的磁盤(pán)和其他塊設(shè)備,默認(rèn)塊大小是1024byte,我本機(jī)上沒(méi)什么IO操作,所以一直是0,但是我曾在處理拷貝大量數(shù)據(jù)(2-3T)的機(jī)器上看過(guò)可以達(dá)到140000/s,磁盤(pán)寫(xiě)入速度差不多140M每秒
          • bo 塊設(shè)備每秒發(fā)送的塊數(shù)量,例如我們讀取文件,bo就要大于0。bi和bo一般都要接近0,不然就是IO過(guò)于頻繁,需要調(diào)整。
          • in 每秒CPU的中斷次數(shù),包括時(shí)間中斷
          • cs 每秒上下文切換次數(shù),例如我們調(diào)用系統(tǒng)函數(shù),就要進(jìn)行上下文切換,線(xiàn)程的切換,也要進(jìn)程上下文切換,這個(gè)值要越小越好,太大了,要考慮調(diào)低線(xiàn)程或者進(jìn)程的數(shù)目,例如在apache和nginx這種web服務(wù)器中,我們一般做性能測(cè)試時(shí)會(huì)進(jìn)行幾千并發(fā)甚至幾萬(wàn)并發(fā)的測(cè)試,選擇web服務(wù)器的進(jìn)程可以由進(jìn)程或者線(xiàn)程的峰值一直下調(diào),壓測(cè),直到cs到一個(gè)比較小的值,這個(gè)進(jìn)程和線(xiàn)程數(shù)就是比較合適的值了。系統(tǒng)調(diào)用也是,每次調(diào)用系統(tǒng)函數(shù),我們的代碼就會(huì)進(jìn)入內(nèi)核空間,導(dǎo)致上下文切換,這個(gè)是很耗資源,也要盡量避免頻繁調(diào)用系統(tǒng)函數(shù)。上下文切換次數(shù)過(guò)多表示你的CPU大部分浪費(fèi)在上下文切換,導(dǎo)致CPU干正經(jīng)事的時(shí)間少了,CPU沒(méi)有充分利用,是不可取的。
          • us 用戶(hù)CPU時(shí)間,我曾經(jīng)在一個(gè)做加密解密很頻繁的服務(wù)器上,可以看到us接近100,r運(yùn)行隊(duì)列達(dá)到80(機(jī)器在做壓力測(cè)試,性能表現(xiàn)不佳)。
          • sy 系統(tǒng)CPU時(shí)間,如果太高,表示系統(tǒng)調(diào)用時(shí)間長(zhǎng),例如是IO操作頻繁。
          • id 空閑 CPU時(shí)間,一般來(lái)說(shuō),id + us + sy = 100,一般我認(rèn)為id是空閑CPU使用率,us是用戶(hù)CPU使用率,sy是系統(tǒng)CPU使用率。
          • wt 等待IO CPU時(shí)間。

          • —————END—————

          PS:如果覺(jué)得我的分享不錯(cuò),歡迎大家隨手點(diǎn)贊、在看。

          ?關(guān)注公眾號(hào):Java后端編程,回復(fù)下面關(guān)鍵字?


          要Java學(xué)習(xí)完整路線(xiàn),回復(fù)??路線(xiàn)?

          缺Java入門(mén)視頻,回復(fù)?視頻?

          要Java面試經(jīng)驗(yàn),回復(fù)??面試?

          缺Java項(xiàng)目,回復(fù):?項(xiàng)目?

          進(jìn)Java粉絲群:?加群?


          PS:如果覺(jué)得我的分享不錯(cuò),歡迎大家隨手點(diǎn)贊、在看。

          (完)




          加我"微信"?獲取一份 最新Java面試題資料

          請(qǐng)備注:666,不然不通過(guò)~


          最近好文


          1、必須推薦的一個(gè)后臺(tái)管理系統(tǒng)

          2、無(wú)意中發(fā)現(xiàn)了一位清華妹子的資料庫(kù)!

          3、Java后端編程讀者群正式成立了!

          4、一套簡(jiǎn)單通用的Java后臺(tái)管理系統(tǒng),拿來(lái)即用

          5、36 張圖梳理 Intellij IDEA 常用設(shè)置



          最近面試BAT,整理一份面試資料Java面試BAT通關(guān)手冊(cè),覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫(kù)、數(shù)據(jù)結(jié)構(gòu)等等。
          獲取方式:關(guān)注公眾號(hào)并回復(fù)?java?領(lǐng)取,更多內(nèi)容陸續(xù)奉上。
          明天見(jiàn)(??ω??)??
          瀏覽 18
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  色婷婷导航 | 无码人妻精品一区二区蜜桃视频 | 美女口鸡免费网站 | 免费在线观看视频无码 | 一区二区永久 |