1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

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

        共 6047字,需瀏覽 13分鐘

         ·

        2021-10-25 10:34


        來源 |?siye1982.github.io/2016/02/25/linux-list/

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

        寫在前面

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

        基本操作

        Linux關(guān)機,重啟

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

        #?重啟
        shutdown?-r?now

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

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

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

        #?查看當前用戶環(huán)境變量
        env

        cat?/proc/cpuinfo

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

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

        #?查看當前CPU運行在32bit還是64bit模式下,?如果是運行在32bit下也不代表CPU不支持64bit
        getconf?LONG_BIT

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

        建立軟連接

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

        rpm相關(guān)

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

        sshkey

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

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

        命令重命名

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

        同步服務(wù)器時間

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

        后臺運行命令

        #?后臺運行,并且有nohup.out輸出
        nohup?xxx?&

        #?后臺運行,?不輸出任何日志
        nohup?xxx?>?/dev/null?&

        #?后臺運行,?并將錯誤信息做標準輸出到日志中?
        nohup?xxx?>out.log?2>&1?&

        強制活動用戶退出

        #?命令來完成強制活動用戶退出.其中TTY表示終端名稱
        pkill?-kill?-t?[TTY]

        查看命令路徑

        which?<命令>

        查看進程所有打開最大fd數(shù)

        ulimit?-n

        配置dns

        vim?/etc/resolv.conf

        nslookup,查看域名路由表

        nslookup?google.com

        last, 最近登錄信息列表

        #?最近登錄的5個賬號
        last?-n?5

        設(shè)置固定ip

        ifconfig?em1??192.168.5.177?netmask?255.255.255.0

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

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

        查看進程樹找到服務(wù)器進程

        ps?auwxf

        查看進程啟動路徑

        cd?/proc/xxx(進程號)
        ls?-all
        #?cwd對應(yīng)的是啟動路徑

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

        #?新增用戶
        useradd?用戶名
        passwd?用戶名

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

        強制關(guān)閉進程名包含xxx的所有進程

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

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

        vim操作

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

        打開只讀文件,修改后需要保存時(不用切換用戶即可保存的方式)

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

        查看磁盤, 文件目錄基本信息

        #?查看磁盤掛載情況
        mount

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

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

        #?查看當前目錄下各個文件,?文件夾占了多少空間,?不會遞歸
        du?-sh?*

        wc命令

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

        #?文件里最長的那一行是多少個字
        wc?-L?filename

        #?統(tǒng)計字節(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

        變更文件所屬用戶, 用戶組

        chown?eagleye.eagleye?xxx.log

        cp, scp, mkdir

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

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

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

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

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

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

        比較兩個文件

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

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

        #?如果做性能測試,?可以每執(zhí)行一次,?往日志里面輸出?“.”?,?這樣日志中的字節(jié)數(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)原因引起的文件中特殊字符的問題

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

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

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

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

        tee, 重定向的同時輸出到屏幕

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

        檢索相關(guān)

        grep

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

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

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

        #?查詢以abc開頭的行
        grep?-n?“^abc”?111.txt?

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

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

        #?比對的時候,不計較大小寫的不同
        grep?'xxx'?-i?xxx.log

        awk

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

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

        find檢索命令

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

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

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

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

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

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

        查看什么進程使用了該端口

        lsof?-i:port

        獲取本機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

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

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

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

        #開啟9090端口的訪問
        /sbin/iptables?-I?INPUT?-p?tcp?--dport?9090?-j?ACCEPT?

        #?防火墻開啟、關(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)試利器

        #給某一個endpoint發(fā)送TCP請求,就將data的內(nèi)容發(fā)送到對端
        nc?192.168.0.11?8000?
        #nc可以當做服務(wù)器,監(jiān)聽某個端口號,把某一次請求的內(nèi)容存儲到received_data里
        nc?-l?8000?>?received_data

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

        tcpdump

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

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

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

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

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

        ss

        #?顯示本地打開的所有端口
        ss?-l?
        ?
        #?顯示每個進程具體打開的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服務(wù)器的進程
        ss?-x?src?/tmp/.X11-unix/*??
        ?
        列出當前socket統(tǒng)計信息
        ss?-s?
        ?
        解釋:netstat是遍歷/proc下面每個PID目錄,ss直接讀/proc/net下面的統(tǒng)計信息。所以ss執(zhí)行的時候消耗資源以及消耗的時間都比netstat少很多

        netstat

        #?輸出每個ip的連接數(shù),以及總的各個狀態(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)計所有連接狀態(tài),?
        # CLOSED:無連接是活動的或正在進行
        # LISTEN:服務(wù)器在等待進入呼叫
        # SYN_RECV:一個連接請求已經(jīng)到達,等待確認
        # SYN_SENT:應(yīng)用已經(jīng)開始,打開一個連接
        # ESTABLISHED:正常數(shù)據(jù)傳輸狀態(tài)
        # FIN_WAIT1:應(yīng)用說它已經(jīng)完成
        # FIN_WAIT2:另一邊已同意釋放
        # ITMED_WAIT:等待所有分組死掉
        # CLOSING:兩邊同時嘗試關(guān)閉
        # TIME_WAIT:主動關(guān)閉連接一端還沒有等到另一端反饋期間的狀態(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

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

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

        dmesg

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

        iostat?-xz?1
        ?
        # r/s, w/s, rkB/s, wkB/s:分別表示每秒讀寫次數(shù)和每秒讀寫數(shù)據(jù)量(千字節(jié))。讀寫量過大,可能會引起性能問題。
        # await:IO操作的平均等待時間,單位是毫秒。這是應(yīng)用程序在和磁盤交互時,需要消耗的時間,包括IO等待和實際操作的耗時。如果這個數(shù)值過大,可能是硬件設(shè)備遇到了瓶頸或者出現(xiàn)故障。
        # avgqu-sz:向設(shè)備發(fā)出的請求平均數(shù)量。如果這個數(shù)值大于1,可能是硬件設(shè)備已經(jīng)飽和(部分前端硬件設(shè)備支持并行寫入)。
        #?%util:設(shè)備利用率。這個數(shù)值表示設(shè)備的繁忙程度,經(jīng)驗值是如果超過60,可能會影響IO性能(可以參照IO操作平均等待時間)。如果到達100%,說明硬件設(shè)備已經(jīng)飽和。
        #?如果顯示的是邏輯設(shè)備的數(shù)據(jù),那么設(shè)備利用率不代表后端實際的硬件設(shè)備已經(jīng)飽和。值得注意的是,即使IO性能不理想,也不一定意味這應(yīng)用程序性能會不好,可以利用諸如預(yù)讀取、寫緩存等策略提升應(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?當前已經(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)
        ?
        可見-buffers/cache反映的是被程序?qū)崒嵲谠诔缘舻膬?nèi)存,而+buffers/cache反映的是可以挪用的內(nèi)存總數(shù).
        ?
        第三部分是指交換分區(qū)

        sar,查看網(wǎng)絡(luò)吞吐狀態(tài)

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

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

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

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            先锋影音资源网站 | 男男室友把我j口硬了 | 亚洲色涩 | 亚洲图片小说欧美激情 | 小视频操逼 | 高清无码不卡在线观看 | 美女黄网站免费 | 波多野结衣一区二区 | a黄片在线| 一级A片处破外女动漫 |