天天看點

Linux運維 第二階段 (十二) 程序管理

Linux運維 第二階段 (十二) 系統管理

>線性記憶體;實體記憶體;頁面-->頁框(映射關系,頁框固定的存儲空間4K)

>計算機所有運作隻在CPU和記憶體中完成,而硬碟隻是IO裝置

>使用者空間;核心空間

>程序上下文切換,環境切換,context switch

>VSZ虛拟記憶體集,邏輯上,包括shared libraries;RSS常駐記憶體集,resident,一定不能被交換出去的指令、變量等核心資料

>MMU,memory management unit

>一個程序的兩個指令不能同時在一個CPU上運作,對于雙核可以在兩個上運作,但不是同時運作

>多程序模型;多線程模型(單程序多線程)

#ls /proc(核心資訊的映射,每一個數字代表一個程序,init程序号永遠為1)

#cat /proc/mem

#cat /proc/1/maps

>IPC(inter process communication程序間通信):共享記憶體;信号signal;semaphore旗語

>單核心:ko(kernel object),核心所專用的子產品

>redhat|suse,核心:可動态加載各種外圍子產品;/lib/modules/”核心版本号命名的目錄”/kernel/{arch,crypto,drivers/net(網卡驅動),fs,kernel,lib,mm,net(tcp/IP協定棧),sound};vmlinuz-2.6.32

#du -sh  /lib/modules/2.6.32-358.el6.x86_64/

#ls -lh  /boot/vmlinuz-2.6.32-358.el6.x86_64

>臨時根檔案系統:/proc,/sys,/dev;将實體記憶體的一段空間模拟成硬碟來使用;initrd(ramdisk,redhat5),initramfs(redhat6)

>運作級别:

0(halt)

1(single user mode,直接以管理者身份切入,使用s,S,single)

2(multi user mode,noNFS)

3(multi user mode,textmode)

4(reserved)

5(multi usermode,graphical mode)

6(reboot)

指令:ps,pstree,pgrep,top,vmstat,free

#ps(report a snapshot ofthe current processes,process state,有sysv風格(選項有-)和BSD風格)

a(所有與終端有關的程序)

u(display user-oriented format)

x(所有與終端無關的程序,在核心啟動時就啟動了,用?表示)

#ps aux(COMMAND一欄,加[]表示核心線程;TIME一欄,占CPU時間非挂鐘時鐘)

注:程序的分類(與終端有關的程序;與終端無關的程序)

程序狀态:D(不可中斷的睡眠);R(運作或就緒);S(可中斷的睡眠);T(停止);Z(僵死);<(高優先級程序);N(低優先級程序);+(前台程序組中的程序);l(多線程程序);s(會話程序首程序)

-e(Select allprocesses. Identical to –A)

-l(long format)

-f(full format同-F)

#ps -ef

#ps -elf

nice值(預設0,-20-19對應100-139,優先級0-139共140種,數字越小優先級越高,其中0-99用于核心調整,100-139使用者可控制):

注:普通使用者僅能調大自己程序的nice值;優先級的調整可獲得更多的CPU運作時間,更優先獲得CPU運作的機會

o(o(1)無論隊列多長,時間一樣,2.6kernel;o(n)線性增長可預測,2.4kernel;o(logn);o(n^2);o(2^n)

#renice NI  PID(alter priority of running processes,調整已在運作的程序的nice值)

#nice -n  NI  COMMAND(run a program with modified scheduling priority啟動時指定nice值)

#pgrep PROCESS_NAME(僅顯示指定程序程序号)

#pgrep -u  root  bash

#pgrep bash

#pidof PROCESS_NAME(顯示PID,根據程式名查找ID号)

#pidof init

#pidof sshd

#pstree(display a tree ofprocesses,顯示程序數)

#pkill

#top(display Linux tasks,監控系統性能,預設每5秒重新整理一次)

load average(1分鐘5分鐘15分鐘的隊列長度)

RES(resident常駐記憶體集)、VIRT(VSZ虛拟記憶體集)

M(根據駐留記憶體大小進行排序)

P(根據CPU使用百分比排序,預設此項)

T(根據累計時間排序)

l(是否顯示平均負載和啟動時間)

t(是否顯示程序和CPU狀态相關資訊)

m(是否顯示記憶體相關資訊)

c(是否顯示完整的指令行資訊)

q(退出top)

k(終止某個程序)

#top -d  1(delaytimeinterval指定延遲時長,每秒重新整理一次)

#top -d  1  -b(batch mode,批模式)

#top -d  1  -b -n  3(在批模式下共顯示多少批)

#kill -l(顯示所有信号)

重要的信号:

1,SIGHUP(讓一個程序不用重新開機就可重讀其配置檔案,并讓新的配置生效

2,SIGINT(interrupt,中斷一個前台程序,ctrl+c)

9,SIGKILL(殺死一個程序,暴力,不告知直接殺死)

15,SIGTERM(終止一個程序,仁道,與其它程序通信并一一終止關閉)

#kill PID(terminate a process,後一定要要跟PID,預設15 SIGTERM)

#kill -SIGKILL  PID

#kill -KILL  PID(信号名稱簡寫)

#killall COMMAND(kill processes by name)

前台作業(占據了指令提示符)

背景作業(啟動之後,釋放指令提示符,後續的操作在背景完成)

ctrl+z(把正在前台的作業送至背景)

#COMMAND &(讓指令在背景執行)

#jobs(檢視背景的所有作業,注意作業号不同于程序号,+表示指令将預設操作的作業,-表示指令将第二個預設操作的作業)

#bg [%]JOBID(background,讓背景的停止作業繼續運作)

#fg %JOBID(frontground,将背景的作業調回前台,bg,fg的%可省)

#kill %JOBID(終止某個作業,此處%不可省,表示作業不是PID)

#vmstat(Report virtualmemory statistics,系統狀态檢視,至關重要,si(swap in),so(swap out),bi(block in),bo(block out),in(interruptnumber中斷的次數),cs(context switch程序切換的次數))

#vmstat 1(每隔1秒顯示一次)

#vmstat 1  5(每隔1秒顯示一次,共5次)

#uptime(Tell how long thesystem has been running,top指令的第一行)

模拟進入自定義根:

#mkdir -pv  /test/virroot/{bin,lib64}

#cp /bin/bash  /test/virroot/

#ldd /bin/bash(print shared library dependencies,查詢指定二進制檔案依賴的共享庫)

#cp  /lib64/libtinfo.so.5/test/virroot/lib/(複制上步查詢到的依賴的庫檔案)

#cp  /lib64/libdl.so.2 /test/virroot/lib/

#cp  /lib64/libc.so.6  /test/virroot/lib/

#cp  /lib64/ld-linux-x86-64.so.2  /test/virroot/lib/

#chroot /test/virroot

#cd /lib64

#pwd

 附:程序狀态

Linux運維 第二階段 (十二) 程式管理

以上是學習《馬哥網絡視訊》做的筆記。

一、程序管理

         1、程序:正在執行的一個程式或指令,每一個程序都是一個運作的實體,都有自己的位址空間并戰勝一定的系統資源;程式:人使用計算機語言編寫的可以實作特定目标或解決特定問題的代碼集合。

         程序管理的作用:判斷伺服器健康狀态;檢視系統中所有程序;殺死程序。

         2、程序的檢視:

         》#ps  aux     (檢視系統中所有程序,使用BSD作業系統格式

         a       與終端相關的程序

         u       使用者導向的使用者清單

         x       所有與終端無關的程序

         顯示項目:

         USER  PID %CPU  %MEM  VSZ RSS  TTY  STAT START  TIME  COMMAND

         STAT:D不可被喚醒的睡眠狀态,通常用于I/O情況;R該程序正在運作;S該程序在睡眠狀态,可被喚醒;T停止狀态,可能在背景暫停或程序在除錯狀态;W記憶體互動狀态(2.6核心開始無效);X死掉的程序;Z僵屍程序,程序已經終止,但部分程式還在内在中;<高優先級;N低優先級;L被鎖入記憶體;s包含子程序;l多線程;+位于背景。

         TIME:該程序占用CPU的運算時間,注意不是系統時間。

         》#ps  -le

         -l       long長格式顯示

         -e      顯示所有程序,與-A作用一緻

         F  S UID  PID  PPID C  PRI  NI ADDR  SZ  WCHAN TTY  TIME  CMD

         F:程序标志,說明程序的權限,常見的有:1程序可複制但不能執行,4程序使用超級使用者權限;

         S:同#ps  aux中STAT一樣;

         C:該程序的CPU使用率,機關是%;

         ADDR:程序在内在的位置;

         SZ:該程序占用多大記憶體;

         WCHAN:該程序是否運作,“-”代表正在運作。

         》#top  選項

         -d  秒數    (指定top指令每隔幾秒更新一次

         -p  PID       (指定PID隻檢視某個PID程序

         -u  使用者名      (隻監聽某個使用者的程序

         -s          (使top在安全模式運作,避免在互動模式中出現錯誤

         -b          (使用批處理模式輸出,與“-n”合用,重定向到檔案中

         -n  次數    (指定top指令執行的次數,與“-b”合用。

         例:#top  -p 15273    (檢視PID為15273的程序資訊

         #top  -b -n  1  > /tmp/top.log

         #top          輸r,互動狀态,可修改優先級nice值

         顯示項目:分為兩部分

         第一部分:

第一行資訊:top  - 15:10:16  up  1 day ,15:10,2user,load average:0.00  0.00 0.00

         注:系統在1分鐘5分鐘15分鐘的平均負載,cpu是單核,超過1是高負載,四核超過4是高負載(依據經驗判斷)

         第二行資訊:Task:95  total , 1 running , 94 sleeping , 0 stopped,  0 zombie

         第三行為cpu資訊:cpu(S):0.1%us,0.1%sy,0.0%ni,99.7%id,0.1%wa,0.0%hi,0.1%si,0.0%st

         注:0.1%us使用者模式占用cpu百分比;0.1%sy系統模式占用cpu百分比;0.0%ni改變過優先級的使用者程序占用cpu百分比;99.7%id空閑cpu的百分比;0.1%wa等待輸入輸出程序占用cpu的百分比;0.0%hi硬中斷請求服務占用cpu百分比;0.1%si軟中斷請求服務占用cpu的百分比;0.0%st當有虛拟機時,虛拟cpu等待實際cpu的時間百分比。

         第四行為實體記憶體資訊:mem:total,used,free,buffers(作為緩沖的記憶體數量)

         第五行為swap資訊:swap:total,used,free,cached(作為緩存的互動分區大小)

         第二部分輸出:

         PID  USER PR  NI  VIRT RES  SHR  S %CPU  %MEM  TIME+ COMMAND

         VIRT:該程序使用的虛拟内在的大小,單元KB

         RES:該程序使用的實體内在的大小,機關KB

         SHR:共享記憶體大小

         S:state

         TIME+:該程序總共占用的CPU時間

         3、程序的管理:

         #pstree  -u|-p            (-u顯示程序的所屬使用者,-p顯示程序的PID

         #kill  -l 或#man  7 signal   (查詢系統可識别的信号

         #kill  -信号  PID       (注意kill後跟的是PID,例:#kill  -1 2246

         #killall  選項  -信号  程序名(注意killall後跟的是程序名,例:#killall  -i -9  sshd

         -i  (interactive互動式

         -I (ignore大小寫

         #pkill  選項  -信号  程序名 (注意pkill後跟程序名,例:#pkill  -t -9  pts/1

         -t  指定終端

         例:#vi  test.sh

         #ps  aux | grep “vi” | grep  -v  “grep”

         #kill  -9 2313

         #ps  aux | grep “vi” | grep  -v  “grep”

         4、程序的優先級:PRI的值由核心動态調整,使用者不能直接修改,可通過修改NI的值來影響PRI的值。

PRI和NI的關系:PRI(最終值)=PRI(原始值)+NI值

修改NI值注意事項:NI值的範圍是-20-19;普通使用者調整NI值的範圍是0-19,而且隻能調整自己的程序;普通使用者隻能調高NI值不能降低,如原本NI值為0,則隻能調整為大于0;root才能設定NI值為負數,而且可調整任何使用者的程序。

#nice  -n  NI值 指令         (給新執行的指令直接賦予NI值

例:#nice  -n -5  service  httpd start

#ps  aux | grep “httpd” | grep  -v  “grep”

#renice  優先級  PID   (修改已經存在的程序NI值

例:#renice  -10 2125

#ps  -le  |grep  “httpd” | grep  -v  “grep”

二、工作管理

         1、背景管理注意事項:

         前台是指目前可以操控和執行指令的操作環境,背景是指工作可以自行運作,但不能直接用ctrl+c終止,隻能使用fg/bg來調用工作;

         目前的登陸終端隻能管理目前終端的工作,如tty1是不能管理tty2的工作的;

         放入背景的指令必須可以持續運作一段時間,這樣才能捕捉和操作這個工作;

         放入背景執行的指令不能和前台使用者有互動或需要前台輸入,否則放入背景隻能暫停不能執行,如vi、top等指令

         2、把指令放入背景:

         方一:#指令  &       (這種方法指令在背景是執行狀态,指令不能與前台有互動,否則不能執行

         例:#find  / -name  install.log  &  (每個背景指令會配置設定一個工作号,也會有程序号

         方二:指令在執行過程中按ctrl+z,指令在背景是暫停狀态,無論有無互動都暫停

         例:#tar  -zcf etc.tar.gz  /etc 按ctrl+z(狀态為stopped

         3、背景管理指令:

         #jobs  -l  (顯示程序的PID

         #fg  %工作号         (将背景暫停的工作恢複到前台執行,%可省略,注意工作号和PID号的差別

         #bg  %工作号        (将背景暫停的工作恢複到背景執行

         4、背景指令脫離登入終端運作:

         方一:#/etc/rc.d/rc.local         (啟動時執行,若有臨時背景任務不能執行

         方二:加入定時任務     (不依賴登入終端

         方三:#nohup  指令  &

                   例:#nohup  find /  -print  > /root/file.log  &

三、系統資源檢視:

         1、#vmstat  重新整理延時  重新整理次數   (監控系統資源,例:#vmstat  1  3

         2、#dmesg |grep  “cpu”       (顯示開機時核心檢測的CPU資訊

         #dmesg| grep “eth0”      

         3、#free  -b|-k|-m|-g            (預設以KB為顯示機關

         4、#cat  /proc/cpuinfo           (檢視CPU資訊

         5、#w                (檢視本機登陸使用者資訊

         #who                   (檢視系統中已登入的使用者

         6、#uptime (top指令的第一行

         7、#uname  -a|-r|-s   (-a檢視系統所有相關資訊,-r檢視核心版本,-s檢視核心名稱

         #file  /bin/ls      (目前系統的位數

         #lsb_release  -a      (目前系統的發行版本

         8、#lsof  -c 字元串|+d 目錄名|-u 使用者名|-p PID 

         -c隻列出以字串開關的程序打開的檔案

         +d列出某個目錄所有被程序調用的檔案

         -u隻列出某個使用者的程序打開的檔案

         -p列出某個PID程序打開的檔案

         例:#lsof |more     (按PID号從1程序開始列出系統中所有的程序正在調用的檔案

         #lsof  +d          /usr/lib          (查詢某個目錄下所有的檔案是被哪些程序調用的

         #lsof  -c httpd     (檢視httpd調用了哪些檔案

         #lsof  -p  1    (查詢PID是1的程序調用的檔案

         #lsof  -u root       (按使用者名查某使用者的程序調用的檔案

四、系統定時任務

         1、at一次性執行的定時任務

         #service  atd start

         #chkconfig  atd  on

         通路控制依靠兩個檔案來實作,/etc/at.allow、/etc/at.deny,預設無/etc/at.allow,注意事項:若同一使用者都在這兩個檔案中,那麼這個使用者可以使用at指令,因為/etc/at.allow優先于/etc/at.deny;若系統中隻有/etc/at.deny,則在這個檔案中的使用者不能使用at指令;若系統中兩個檔案都不存在,則隻有root才可使用at指令。

         #at  選項  時間

         -m    (當at工作完成後,無論是否有輸出都用email通知執行at指令的使用者

         -c  工作号      (顯示該at工作的實際内容

         時間:HH:MM

         HH:MM  YYYY-MM-DD

         HH:MM[am|pm] [month] [date]

         HH:MM[am|pm] + [minutes|hours|days|weeks]

         例:#at  now +2minutes

         at>/root/hello.sh >> /root/hello.log

         at><EOT>         (使用ctrl+d儲存at任務

         job1  at 2015-05-16  18:35

         #at  -c  8      (查詢第8個at工作的内容

         #at  02:00 2015-5-16

         at>編輯

         #atq           (查詢目前伺服器上at的工作

         #atrm         (删除指定的at任務

         2、crontab循環執行定時任務

         》使用者的crontab設定

         #service  crond start

         #chkconfig  crond on

         /etc/cron.allow、/etc/cron.deny這兩個檔案同at的兩個檔案一樣,預設無/etc/cron.allow

         #crontab  -e|-l|-r|-u      (-e編輯crontab定時任務;-l查詢;-r删除目前所有的任務,若隻想删一個用#crontab  -e;-u接使用者名,修改或删除其他使用者的crontab任務

         *  * *  *  * 執行的任務

         注意事項:

六個選項不能為空必須填寫,不确定可用“*”代替為任意時間;

         最小有效時間是分,最大時間範圍是月;

         日期和星期不要在一條定時任務中出現,若出現則是先碰到哪個執行哪個,最終都會執行;

         指令都要用絕對路徑,因為/etc/crontab中PATH與環境變量的PATH不一緻。

         第一個*  一小時當中的第幾分鐘   0-59

         第二個*  一天當中的第幾小時     0-23

         第三個*  一個月當中的第幾天     1-31

         第四個*  一年當中的第幾月       1-12

         第五個*  一周當中的星期幾       0-7(0和7都是sunday)

         *       代表任何時間,例:第一個*代表一小時中的每分鐘都執行一次

         ,     代表不連續的時間,例:“0  8,12,16 *  *  * 指令”代表在每天的8點0分,12點0分,16點0分都執行一次

         -     代表連續的時間範圍,例:“0  5 *  *  1-6  指令”代表周一到周六5點0分執行

         */n   代表每隔多久執行一次,例:“*/10  * *  *  *  指令”代表每隔10分鐘執行一次

         例:#crontab  -e

         5  5 *  *  2       /sbin/shutdown  -r  now    (每周二的5點5分重新開機

         30  3 1,10,15  *  *  /root/sh/autobak.sh        (每月的1号10号15号執行腳本

         #crontab  -l

         #crontab  -r

         》系統的crontab設定:

         配置方法兩種:

         方一:把需要定時執行的工作寫成腳本,賦予執行權限,複制到/etc/cron.{hourly,daily,weekly,monthly}

         方二:修改/etc/crontab,自己加入自己的定時任務,需注意加入指定腳本的執行者身份(root才能修改此檔案)

         #vi  /etc/crontab

         *  * *  *  * root  run-parts  /root/cron/

         注:run-parts是/usr/bin/下的腳本,/root/cron/此目錄下的腳本會按時執行

         3、anacron:解決伺服器意外關機,定時任務沒有執行

         檢測周期為1天7天1個月,anacron會讀取/var/spool/anacron/目錄中的檔案的時間與目前時間比較,若內插補點超過了anacron的指定時間(1天7天1個月),anacron會執行漏掉的定時任務。

         centos6.x(anacron不再是單獨的服務,而變成了系統指令;cronie-anacron取代了vixie-cron軟體包),/etc/cron.{daily,weekly,monthly}隻會被anacron調用,是為避免cron和anacron重複執行同一個定時任務,是以可将定時任務的腳本放在此目錄下。

         #anacron   選項  工作名

         -s      (開始anacron工作,依據/etc/anacrontab檔案中設定的延遲時間執行

         -n      (立即執行/etc/anacrontab中所有工作,忽略所有的延遲時間

         -u      (更新/var/spool/anacron/cron.{daily,weekly,monthly}檔案中的時間戳,但不執行任何工作。

         工作名:依據/etc/anacrontab檔案中定義的工作名

         注:系統會依賴/etc/anacrontab檔案中的設定通過anacron執行定時任務

         例:設定定時任務在每天的03:00-05:00執行

         #vi  /etc/anacrontab

         RANDOM_DELAY=0                   (最大随機延遲

         START_HOURS_RANGE=3-5        (執行時間範圍

         periedin days  delay in minutes       job-identifier    command

         1            0            cron.daily       nice run-parts/etc/cron.daily

         7            0            cron.weekly    nice run-parts /etc/cron.weekly

         @monthly         0          cron.monthly  nice run-parts /etc/cron.monthly

注:本文由網際網路收集整理(51CTO、360DOC、chinaunix、百度百科、兄弟連免費視訊等)。      

繼續閱讀