進程和計劃任務管理
系統管理命令
一、Linux的進程構造:
二、進程管理的各種命令
ps:
看進程(默認好多都看不見)
ps aux
(a看所有)專門用來看CPU和內存(MEM)使用情況
ps aux 查看進程占用CPU和內存的百分比 ====a 查看所有進程信息 u以用戶為主的格式輸出進程信息 x顯示當前用戶在所有終端下的進程信息
ps –ef
顯示系統中的進程信息
e顯示系統內所有進程 f 使用完整格式顯示進程信息
所有已啟動的服務 主要用來過濾|grep sshd 看服務開沒開
(經常與管道符和grep一起使用) ps -ef | grep 服務名
pgrep命令
查看某個服務的PID號
pgrep -l 顯示進程名
-U 指定特定用戶
-t 指定終端
查看socket
pgrep sshd | head -1
kill `pgrep sshd | head -1`
pstree命令
pstree -aup ==========a 顯示完整信息 u 列出對應用戶名 p 列出對應PID號
PID:進程號
PPID 其父進程號
pts遠程登錄終端名稱
TTY:終端號
TIME:占用CPU的時間
CMD:
正在執行的命令(文件位置,如果是病毒進程,先刪掉文件,再
圖詳細解釋
w命令看遠程連接
tty1:本地登錄終端 pts1 遠程連接
三、三種查看端口號情況的方式
netstat -antup 看端口號
ss –antup 看端口號
lsof –i:22 看端口號
四、top動態查詢進程命令
顯示進程排名(默認以CPU占用率排序)
CPU: 99.7%id----->id指的是CPU可用容量百分比
top -u 指定用戶名
top -p 指定進程號
top:動態查詢系統進程命令,監控查看CPU MEM(內存)使用情況
左上角的按1變成代表第一個內核
如果虛擬機4核就有0、1、2、
看具體虛擬機的哪個核,實時的看進程百分比,CPU,MEM
top這個命令工作中不能經常用,占用資源過大
NI:nice值,負值表示高優先級,正值表示低優先級,將優先級調低,可避免在內存溢出時被kill
五、切換後臺命令
在vim中不想退出,按Ctrl+z切到後臺,fg切回前臺
六、kill殺命令
kill, killall, pkill命令
kill:
需要根據PID號殺進程
kill PID 號 (溫柔殺)
-9強殺(發送強制終止信號)
-15 溫柔殺(發送正常終止信號)
-2 即Crtl+c
建議工作中先用-15 再用-9
killall:
需要根據服務名殺,因為會把後代子孫都殺。 -9也是強殺
pkill:
也是根據服務名殺,不殺後代,能踢人(能根據終端名殺)
七、Linux操作系統垃圾回收機制原理
概述
通常情況下,子進程由父進程生成;因此,子進程一旦執行結束,默認由他的父進程管理。如果父進程比子進程執行結束的還早,那麽子進程會交給父進程的父進程來管理。
加入所有父進程都結束了,默認會交給所有父進程的總進程init進程來管理。
===============================================================================
1、僵屍進程的產生
子進程執行結束,默認父進程管理;父進程比子進程先結束,由父進程的父進程進行管理;若,父進程執行結束,但是父進程未連接到其父進程管理其子進程
導致子進程被遺忘,無管理;此時,子進程為僵屍進程;
代碼由開發編寫,父進程結束後由父進程的父進程對子進程進行管理的代碼也是由開發編寫的,如果開發忘記編寫,導致服務器運行這個程序,就會發生子進程未被管理的情況
===============================================================================
2、僵屍進程的後果
最可怕的後果並不是資源的占用,因為一個進程占不了多少資源,嚴重的是,僵屍進程會永遠占用PID號(操作系統的PID號有上限 65535),如果達到上限,Linux會默認什麽服務都不能開啟
===============================================================================
排查僵屍進程
方法一:
top
第二行最後一個單詞zombie,僵屍
方法二:
ps aux
查看STAT下,若出現Zz的進程,出現僵屍進程
ps aux | grep "^Zz$" | wc -l
方法三:
ps -ef -o pid,stat ,cmd=======-o 指定輸出的字段名 cmd 顯示命令
查看STAT下,若出現Zz的進程,出現僵屍進程
系統優先機制
系統有一個優先殺機制,OOM
當系統內存不夠用時,系統會啟動它的優先殺機制,優先殺掉占用進程大的文件;
所以我們工作中,要把重要程序的優先級調低,這樣啟動機制時,就能保障關鍵程序的安全。
八、定時任務 crond
1、概述
Linux系統自身定期執行的任務工作:系統周期性自行執行的任務工作。
/var/log/messages* #系統的日誌,每七天自動切割
系統自動定時任務: /var/log/messages* (每七天自動切割)
定時任務可以有五個時間段:分、時、日、月、周
*(一個星代表每分鐘)**(每個星代表每小時)以此類推…
定時任務文件放置的目錄:/var/spool/cron/root
查看定時任務日誌:/var/log/cron/
service crond status 查看crond服務是否開啟
crontab -l查看當前用戶的定時任務
crontab -e進入編輯狀態
crontab –u user指定用戶看他的定時任務
crontab -r 刪除定時任務(遞歸刪除)
舉個例子:
定時任務用時要用絕對路徑,因為有的命令定時任務不一定能找到
因為定時任務裏的PATH環境變量與Linux的PATH不一致
eg:
* * * * * /bin/echo"111111" >> /tmp/yunjisuan.txt */5 表示每隔五分鐘
回車
此時,crontab -l中產生新的定時任務
ll /var/spool/cron/ 定時文件放置目錄
出現root用戶的定時文件
ll /var/log/cron/ 查看定時任務的日誌文件
查看定時任務的日誌文件
tail /var/log/cron 查看定時任務日誌文件
從定時任務的命令裏看到,定時任務被執行了兩次(一分鐘一次),
tail -f /var/log/cron/ 動態追蹤日誌文件
2、賦值和環境變量
$取值,(eg:x=5 echo $x 5 )
PATH環境變量,敲命令,去哪找這個命令
如果PATH=0,那麽輸入命令就需要輸入命令的絕對路徑才能用
export 全局生效,子進程後面的兒子全生效
定時任務用時要用絕對路徑,因為有的命令定時任務不一定能找到
因為定時任務裏的PATH環境變量與Linux的PATH不一致
擴展
定時任務配置文件 /etc/crontab
SHELL=/bin/bash用/bin/bash去解析定時任務文件裏的命令
PATH 環境變量 告訴Linux去哪裏找命令
如果PATH裏的變量賦值為空,外置命令不能執行,內置命令可以執行,解決方法:手動寫路徑找回
(定時任務配置文件裏的PATH環境變量與Linux操縱系統的PATH不一致,導致有的任務在Linux能找到,但定時任務裏找不到,所以要求定時任務裏的命令必須用絕對路徑)
export 全局聲明,將後面的變量進行全局生效;此時,同一個父進程下的所有子進程生效,但再生成的子進程就不生效了。
MAILTO=root 指定郵件發送用戶 定時任務有數據輸出時,會給root發郵件
Service postfix status 查看郵件服務狀態
HOME=/ 定時任務啟動路徑永遠從根開始
3、屏幕輸出解決方法
要求:要關註定時任務環境變量,命令起始點在根下;
定時任務不能有任何屏幕輸出,不能產生垃圾輸出,垃圾文件重定向到> /dev/null 2>&1或>/dev/null 2 > /dev/null
如果關閉郵件服務,就不會產生郵件,郵件發不出去,定時任務會產生屏幕輸出的話,就會在/var/spool/postfix/maildrop/下生成許多小文件,小文件過多會讓服務器無法工作
因為 ll -i 中查看的inode號有上限,一旦inode達到上限就無法創建文件(即使磁盤還有空間)
4、inode號使用情況查看
df -h 磁盤的真實容量大小 Use% 磁盤使用空間
df -hi 磁盤的inode號 IUse% inode號使用空間
這兩個容量一旦有一個達到上限,磁盤都無法存數據
5、主要相關文件
系統默認的設置,位於目錄:/etc/cron.*/
用戶定義的設置,位於文件:/var/spool/cron/用戶名
查看定時任務日誌:/var/log/cron/
/etc/crontab定時任務的配置文件
6、開機自啟動文件設置命令(擴展awk)
JVM 中的OOM(out of memory)內存溢出,涉及到操作系統優先級,輪詢機制,按優先級一個一個kill
進程和計劃任務管理