1. 進程管理
1.1 進程
- 進程是正在執行的一個程序或命令,每個進程都是一個運行的實體,都有本身的地址空間而且會佔用必定的系統資源
- 進程能夠理解爲正在執行的某個程序
1.2 進程管理簡介
- 判斷服務器的狀態
- 查看系統中的全部進程
- 殺死進程,只有沒法關閉纔要殺死進程
1.3 進程的查看命令(ps)
ps aux
查看系統中全部進程,使用BSD操做系統格式
ps -le
查看系統中全部進程,使用Linux標準格式
- TTY是TeleType的一個縮寫,原來指的是電傳打字機,是經過串行線用打印機鍵盤經過閱讀和發送信息的東西
- pts(pseudo['su:doʊ]-terminal slave)是所謂的僞終端或虛擬終端
1.3.1 選項
參數 |
含義 |
-a |
顯示一個終端的全部進程 |
-u |
顯示進程的歸屬用戶及內存的使用狀況 |
-x |
顯示沒有控制終端的進程 |
-l |
長格式顯示,顯示更詳細的信息 |
1.3.2 結果字段含義
數據 |
含義 |
USER |
該進程是由哪一個用戶建立的 |
PID |
進程的ID號 |
%CPU |
該進程佔用CPU資源的百分比,佔用越高說明越消耗系統資源 |
%MEM |
該進程佔用物理內存的百分比,佔用越高說明越消耗系統資源 |
VSZ |
該進程佔用虛擬內存的百分比,單位是KB |
RSS |
該進程佔用實際物理內存大小,單位是KB |
TTY |
該進程在哪一個終端中運行。tty1tty7表示本地控制終端,tty1tty6是字符終端,tty7是圖形終端。pts/0~255表明虛擬終端,?表示此終端是系統啓動的 |
STAT |
進程狀態 |
START |
該進程的啓動時間 |
TIME |
該進程佔用CPU的運算時間,數值越高說明越消耗系統資源 |
COMMAND |
產生此進程的命令名 |
1.3.3 進程狀態(STAT)
參數 |
含義 |
R(Runing) |
運行 |
S(Sleep) |
休眠 |
T(Terminated) |
中止 |
S(Son) |
包含子進程 |
+ |
位於後臺 |
1.4 pstree
1.5 進程的查看(top)
top -b -n 1 > top.txt
複製代碼
1.5.1 選項
選項 |
含義 |
-b |
使用批處理模式輸出,通常和-n 配合使用 |
-n |
次數,指定top命令執行的次數。通常了-b 選項配合使用 |
-d |
秒數,指定top命令每隔幾秒更新。默認是3秒 |
1.5.2 交互模式的命令
選項 |
含義 |
?或h |
顯示交互模式的幫助 |
P |
按CPU使用率排序,默認就是此選項 |
M |
之內存的使用率排序 |
N |
以PID排序 |
q |
退出top |
1.5.3 狀態欄
1.5.3.1 第一行爲任務隊列信息
內容 |
說明 |
12:12:12 |
系統的當前時間 |
up 1 day 5:33 |
系統的運行時間,本機已經運行了1天5小時33分 |
2 users |
當前登陸了二個客戶端 |
load average 0 0 0 |
系統在以前1分鐘、5分鐘、15分鐘的平均負載。通常認爲小於1小時負載較小,大於1超過負載 |
1.5.3.2 第二行爲進程信息
內容 |
說明 |
Tasks: 100 total |
系統中的進程總數 |
1 running |
正在運行的進程數 |
94 sleeping |
睡眠的進程 |
0 stopped |
正在中止的進程 |
0 zombie |
殭屍進程。若是不是0的話要進行檢查 |
1.5.3.3 第三行爲CPU信息
內容 |
說明 |
Cpu(s): 0.1%us |
用戶模式佔用的CPU百分比 |
0.1%sy |
系統模式佔用的CPU百分比 |
0.0%ni |
改變過優先級的用戶進程 佔用的CPU百分比 |
99.7%id |
空閒CPU的CPU百分比 |
0.1%wa |
等待輸入/輸出的進程的佔用CPU百分比 |
0.1%hi |
硬中斷請求服務佔用的CPU百分比 |
0.1%si |
軟中斷請求服務佔用的CPU百分比 |
0.0%st |
st(Steal time)虛擬時間百分比,就是當有 |
1.5.3.4 第四行爲物理內存信息
內容 |
說明 |
Mem: 1030720k total |
物理內存的問題,單位是KB |
551860k used |
已經使用的物理內存數量 |
478860k free |
空閒的物理內存數量,虛擬機分配了1024M內存,使用了538M,空閒467M |
43180k buffers |
做爲緩衝的內存數量,能夠存放須要寫入硬盤的數據,用來加速數據的寫入 |
1.5.3.5 第四行爲交換分區信息
內容 |
說明 |
Swap: 2047992k total |
總計的交換分區(虛擬內存)大小 |
536k used |
已經使用的交換分區大小 |
2047456k free |
空閒的交換分區大小 |
368164k cached |
把須要常常讀取的數據從硬盤讀到內存中,加速了數據的讀取 |
1.6 殺死進程(kill)
1.6.1 進程信號
信號 代碼 |
信號名稱 |
說明 |
示例 |
1 |
SIGHUP |
該信號讓進程當即關閉,而後重寫讀取配置文件後重啓,平滑重啓 |
kill -1 -HUP 進程號 |
2 |
SIGINT |
程序終止信號,用於關閉前臺進程,至關於ctrl+c |
|
9 |
SIGKILL |
用來馬上結束程序的運行,本信號不能阻塞、處理和忽略,通常用於強制停止 |
|
15 |
SIGTERM |
正常結束進程的信號,kill命令的默認信號。若是不能正常停止,纔會嘗試SIGKILL信號 |
|
1.6.2 殺死進程
sleep.shmysql
#!/bin/bash
i=0
while [ $i -le 1000 ]
do
echo $(date)
sleep 1s
done
sh sleep.sh &
ps -ef | grep sleep.sh
kill 進程號
複製代碼
2. 系統資源查看
2.1 vmstat
- 監控系統資源使用狀態
- vmstat [刷新延時 刷新次數]
vmstat 1 3
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu-----
r b swpd free buff cache si so bi bo in cs us sy id wa st
1 0 532 329932 99388 459768 0 0 16 81 59 50 3 1 96 0 0
複製代碼
2.1.1 (procs)進程信息字段
分類 |
參數 |
含義 |
procs |
r |
等待運行的進程數,數量越大,系統就越繁忙 |
procs |
b |
不可被喚醒的進程數量,數量越大,系統越繁忙 |
2.1.2 memory(內存信息字段)
分類 |
參數 |
含義 |
memory |
swpd |
使用的Swap空間的大小,單位KB |
memory |
free |
空閒的內存容量,單位KB |
memory |
buff |
緩衝的內存容量,單位KB |
memory |
cache |
緩存的內存容量,單位KB |
2.1.3 swap(交換分區信息)
- 若是說si和so數越大說明數據常常要在磁盤和內存之間數據交換,系統性能就會越差
分類 |
參數 |
含義 |
swap |
si(in) |
從磁盤中交換到內存中的數據的數量,單位KB |
swap |
so(out) |
從內存中交換到硬盤中的數據的數量,單位KB |
2.1.4 io(磁盤讀寫)
分類 |
參數 |
含義 |
io |
bi(in) |
從塊設備讀入數據的問題,單位是塊 |
io |
bo(out) |
寫到塊設備的數據的總量,單位是塊 |
2.1.5 system(系統信息字段)
分類 |
參數 |
含義 |
system |
in(interrupt) |
每秒被中斷的進程次數 |
system |
cs(switch) |
每秒鐘進行的事件切換次數 |
2.1.6 CPU(CPU信息字段)
分類 |
參數 |
含義 |
CPU |
us(user) |
非內核進程消耗CPU運算時間的百分比 |
CPU |
sy(system) |
內核進程消耗CPU運算時間的百分比 |
CPU |
id(idea) |
空閒CPU的百分比 |
CPU |
wa(wait) |
等待I/O所消耗的CPU百分比 |
CPU |
st(steal) |
被虛擬機偷走的CPU百分比 |
2.3 free
- 查看內存使用狀態
- free [-b|-k|-m|-g]
- 選項
- -b 以字節爲單位
- -k 以KB字節爲單位
- -m 以MB字節爲單位
- -g 以GB字節爲單位
# free -m
total used free shared buffers cached
Mem: 1006 687 319 0 98 449
-/+ buffers/cache: 139 866
Swap: 1999 0 1999
複製代碼
2.3.1 第一行
分類 |
參數 |
含義 |
total |
內存總數 |
|
used |
已經使用的內存數 |
|
free |
空閒的內存數 |
|
shared |
多個進程共享的內存數 |
|
buffers |
緩衝區內存數 |
|
cached |
緩存內存數 |
|
2.3.2 第二行
參數 |
算法 |
含義 |
- buffers/cache |
第一行的used-buffers-cached |
已經使用的要減去緩存和緩衝的內存量 |
+ buffers/cache |
第一行的free+buffers+cached |
空閒的要加上緩存和緩衝的內存量 |
2.3.3 第三行
分類 |
參數 |
含義 |
total |
swap總數,默認單位是K |
|
used |
已經使用的swap數,默認單位是K |
|
free |
空閒的swap數,默認單位是K |
|
2.6 查看內核相關信息
# uname -a
Linux localhost 2.6.32-279.el6.i686 #1 SMP Fri Jun 22 10:59:55 UTC 2012 i686 i686 i386 GNU/Linux
# uname -s
Linux
# uname -r
2.6.32-279.el6.i686
複製代碼
2.7 查看操做系統位數
file /bin/ls
複製代碼
2.8 查看發行版本
lsb_release -a
複製代碼
2.9 查看發行版本
yum install redhat-lsb -y
lsb_release -v
複製代碼
3. 系統定時任務
- 有些任務好比備份數據庫等操做須要在系統空閒的時候執行
3.2 crontab
systemctl restart crond.service
複製代碼
3.2.3 crontab設置
- crontab [選項]
- 選項
- -e 編輯crontab定時任務
- -l 查詢crontab任務
- -r 刪除當前用戶全部的crontab任務
* * * * * 執行的任務
複製代碼
3.2.3.1 語法
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
複製代碼
3.2.3.2 位置
項目 |
含義 |
範圍 |
第1個星 |
1個小時中的第幾分鐘 |
0~59 |
第2個星 |
1天當中的第幾小時 |
0~23 |
第3個星 |
1月當中的第幾天 |
1~31 |
第4個星 |
1年當中的第幾月 |
1~12 |
第5個星 |
1周當中的星期幾 |
0~6 |
3.2.3.3 特殊符號
符號 |
含義 |
例子 |
* |
表明任意時間 |
好比第一個星就表明一個小時中每分鐘都執行一次 |
, |
表明不連續的時間 |
好比"1,2,3 ",就表明每小時的1分、2分、3分執行命令 |
- |
表明連續的時間範圍 |
好比 " 1-5 * ** ",表明每小時的第1分到第5分執行命令 |
*/n |
表明每隔多久執行一次 |
好比 "/10 " 就表明每隔10分鐘就執行一次命令 |
0 0 1,10 * 1 |
每個月1號和10號,每週1的0點0分都會執行 |
|
3.2.3.4 案例
符號 |
含義 |
10 22 * |
在天天的22點10分執行 |
0 15 1 |
每週1的15點0分執行 |
0 5 5,10 |
每個月5號和10號的凌晨5點整執行 |
10 5 1-5 |
每週一到週五的凌晨5點10分執行命令 |
/10 10 |
天天凌晨10點鐘,每隔10分鐘執行一次 |
3.2.3.5 注意事項
- 全部選項不能爲空,必須填寫
- crontab最小單位是分鐘,最大單位是天
- 無論寫命令仍是腳本都要使用絕對路徑
3.3 系統定時任務
crontab -e
是用戶執行的命令,不一樣的用戶身份能夠執行本身的定時任務
- 若是須要系統執行定時任務,能夠編輯
/etc/crontab
文件
/etc/crontab
能夠指定shell、路徑、郵件發送和家目錄
3.3.1 /etc/crontab
5 5 * * * echo `date` >> /root/date.log
複製代碼
4. 實戰任務
4.1 監控nginx
nginx.shnginx
#!/bin/bash
local nginx
nginx=`ps -ef |grep nginx|grep -v grep|wc -l`
if [ $nginx -gt 2 ];then
echo "your nginx is running"
exit 0
else
/bin/systemctl start nginx.service
exit 1
fi
複製代碼
4.2 監控mysql狀態
mysql.sh算法
#!/bin/sh
PortNum=`netstat -lnt|grep 3306|wc -l`
if [ $PortNum -eq 1 ]
then
echo "mysqld is running."
else
echo "mysqld is stoped."
fi
複製代碼
4.3 mysql備份腳本
mysql_backup.shsql
#!/bin/bash
DATE=$(date +%F_%H-%M-%S)
HOST=127.0.0.1
DB=test
USER=root
PASS=abcd1#EFG
MAIL="83687401@qq.com"
BACKUP_DIR=/data/db_backup
if [ ! -d "$BACKUP_DIR" ];then
mkdir -p $BACKUP_DIR
fi
SQL_FILE=${DB}_FULL_$DATE.sql
BAK_FILE=${DB}_FULL_$DATE.zip
cd $BACKUP_DIR
if mysqldump -h$HOST -u$USER -p$PASS -B $DB > $SQL_FILE; then
zip $BAK_FILE $SQL_FILE && rm -rf $SQL_FILE
if [ ! -s $BAK_FILE ]; then
echo "$DATE 備份失敗" | mail -s "備份失敗" $MAIL
fi
else
echo "$DATE 備份失敗" | mail -s "備份失敗" $MAIL
fi
find $BACKUP_DIR -name '*.zip' -ctime +14 -exec rm {} \;
複製代碼