2016 - 2024

感恩一路有你

linux 脚本进程监控系统 如何限制linux所有进程可使用的总内存?

浏览量:4455 时间:2023-05-07 10:33:38 作者:采采

如何限制linux所有进程可使用的总内存?

下面的shell脚本可以实时的监控系统中各个进程的CPU和内存的占用资源情况,主要用于限制下载进程CPU占用率更加比较合理。

#!/bin/shPIDS`top-bn1|grep#34^*[1-9]#34|awk'{if($9a850||$10gt25ampampid-u$2dstrok500)print$1}'`ofPIDin$PIDSdorenice10$PIDecho#34renice10$PID#34stopped能够将这个脚本放到cron中运行,比如每分钟检查一次,单单以root身份直接添加crontab项:

#crontab-e*****以后每个一分钟可能会检查一下四次,调整占用资源50%以上CPU或25%内存的进程的nice值,从而使这样的进程优先级变低,被指挥调动的机会降低,而会向root发邮件不提示该进程被按照过。

不过,没限制内存使用建议那就用PAM,RedHat也能在中配置。

Linux中,shell脚本如何使用信号机制去控制线程的开启关闭?

trap是Linux的内建命令,主要是用于捕捉信号,trap命令是可以指定你收到消息某种信号时所执行的命令。trap命令的格式不胜感激:,当收不到到sinN中输入一个信号时,先执行command命令,command命令能够完成后再继续可以接收到信号前的操作,直到此时脚本结束。凭借trap命令捕抓INT信号(即与Ctrlc绑定的网络中断信号)。trap还可以忽略某些信号,将command用空字符串不用即可解决,如trapTERMINT,忽视kill%n和Ctrlc你的邮箱的信号(kill发送的是TERM信号)。Linux更为出色的干掉进程的命令:kill-9进程号(或kill-9%n作业号)等价与kill-KILL进程号。

举个例子

最近小A是需要生产2015年全年的KPI数据报表,现在小A早就将生产脚本写行了,生产脚本两次没有办法加工生产重新指定几天的KPI数据,打比方跑三次生产脚本是需要5分钟,这样的话:

假如是循环顺序执行,这样不需要时间:5*3651825分钟,约46天

如果是最多扔到linux后台并发先执行,365个后台任务,系统可承受住忍耐不住哦!

若是肯定不能最多把365个任务放在linux后台执行,那么,可不可以基于自动出现地有时候将N个任务扔到后台并发执行呢?肯定是也可以的啦。

#!/bin/bash

source/etc/profile

#-----------------------------

tempfifo$$.fifo#$$意思是当前不能执行文件的PID

begin_date$1#就开始时间

end_date$2#结束时间

if[$#-eq2]

then

if[$begin_datea8$end_date]

then

echoError!$begin_datearegreaterthan$end_date

exit1

fi

exists

echoError!Notenoughparams.

echoSample:shloop_kpi 2015-12-01 2015-12-07exit 2 i

#-----------------------------

trapexec1000gtamp-exec1000

mkfifo$tempfifo

exec1000$tempfifo

rm-rf$tempfifo

for((i1i

unit

echogtamp1000

work

while[$begin_date!$end_date]

read-u1000

{

echo$begin_date

hive-fkpi_report.sql--hivevardate$begin_date

echogtamp1000

}amp

begin_date`date-d1day$begin_date%Y-%m-%d`

done

wait

echowork!!!!!!!!!!

第6~22行:比如说:shloop_kpi_2015-01-012015-12-01:

$1它表示脚本入参的第一个参数,等于2015-01-01

$2来表示脚本入参的第二个参数,=2015-12-01

$#表示脚本入参的个数,=2

第13行作用于比较传出的两个日期的大小,gt是转义

第26行:意思是在脚本运行过程中,要是能接收到CtrlC掉线命令,则直接关闭文件描述符1000的读写,并正常后退

exec1000gtamp-它表示自动关闭文件描述符1000的写

exec1000

trap是捕捉猎物自动命令

第27~29行:

第27行,修改一个管道文件

第28行,将文件描述符1000与FIFO参与手机绑定,写的手机绑定,则标注对文件描述符1000的所有操作同具于对管道文件$tempfifo的操作

第29行,可能会会有这样的疑问:我想知道为什么不真接不使用管道文件呢?实际上这并非脱了裤子放屁,管道的一个不重要特性,那就是写操作要另外未知,失衡某一个操作,两个你操作应该是回返,而第28行的绑定文件描述符(读、写解除绑定)恰好可以解决了这个问题

第31~34行:对文件描述符1000参与中写入能操作。循环写入到8个空行,这个8那是我们要定义的后台并发的线程数。为啥是写空行而也不是写其它字符?因为管道文件的读取,是以行为单位的

第37~42行:

第37行,read-u1000的作用那就是加载管道中的一行,在这里那就是无法读取一个空行;隔一段时间读取文件管道都会下降一个空行

第39~41行,再注意到第42行结尾的amp吗?它它表示进程放linux后台中想执行

第41行,执行完后台任务之后,往文件描述符1000中中写入一个空行。这是关键所在了,导致read-u1000有时候不能操作,都会导致管道会减少一个空行,当linux后台放入了8个任务之后,由于文件描述符1000没有可读取文件的空行,将可能导致read-u1000总是在再等待。

脚本 文件 进程 管道 信号

版权声明:本文内容由互联网用户自发贡献,本站不承担相关法律责任.如有侵权/违法内容,本站将立刻删除。