linux 进程空间分配(linux 进程空间)-冯金伟博客园

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

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

#!/bin/shPIDS=`top -bn 1 | grep "^ *" | awk ’{ if($9 > 50 || $10 > 25 && id -u $2 > 500) print $1}’`for PID in $PIDSdo renice +10 $PID echo "renice +10 $PID"done能够将这个脚本放到cron中运行,比如每分钟检查一次,只需以root身份添加crontab项:

#crontab-e*****limit.sh 以后每个一分钟就会检查一次,调整占用50%以上CPU或25%内存的进程的nice值,从而使这样的进程优先级变低,被调度的机会减少,同时会向root发邮件提示该进程被调整过。

但是,限制内存使用最好还是用PAM,RedHat能够在/etc/security/limits.conf中配置。

linux服务器磁盘满了怎么办?

1、遇到磁盘空间不足的报错时候,首先使用df -h查看磁盘空间使用情况,找到空间达到100%的目录磁盘。

2、进入该目录,查找磁盘空间中的大文件,使用命令du -sh *查找占用空间大的目录,通过逐层定位,最后找到具体的文件。

linux 进程空间分配(linux 进程空间)-冯金伟博客园

3、如果是久远的log文件,一般是用不到的,可根据自己的情况删除,通过下述命令删除该文件夹下指定天数之前的文件:

find . -mtime +5 -type f -name “*” -exec rm -f {} ;

完成上述操作后,可释放掉部分存储空间。

4、除了磁盘空间除了文件占用之外,还有一种情况,当磁盘空间满了之后,我们无法查找到大文件,此时可能是文件可能已经被删掉,但有进程依然在使用它。在进程运行期间,Linux 不会释放该文件的存储空间。

linux 进程空间分配(linux 进程空间)-冯金伟博客园

5、此时适用命令lsof | lsof | grep deleted 查找到占用的进程,直接停止进程或者kill掉就可以释放空间(注:如果不是生产环境,重启操作系统,空间也会释放)

linux进程调度的三种策略是什么?

进程调度策略就是调度系统种哪一个进程来CPU运行。

这种调度分2层考虑。

第一层,进程状态这个是最优先考虑的,也就是说优先级最高的。

在linux中只有就绪态的进程才有可能会被调度选中然后占有CPU,其它状态的进程不可能占有的到CPU。

下面是linux中进程的状态 TASK_RUNNING:就绪状态,得到CPU就可以运行。

TASK_INTERRUPTIBLE:浅度睡眠,资源到位或者受到信号就会变成就绪态。

TASK_UNINTERRUPTIBLE:深度睡眠,资源到位就会进入就绪态,不响应信号。

TASK_ZOMBIE:僵死态,进程exit后。

TASK_STOPPED:暂停态,收到SIG_CONT信号进入就绪态。

第二层,其实真正在操作系统中的实现,就是所有就绪态进程链接成一个队列,进程调度时候只会考虑这个队列中的进程,对其它的进程不考虑,这就实现了第一层中的要求。

接下来就是就绪队列内部各个进程的竞争了。

Linux采用3种不同的调度政策,SCHED_FIFO(下面简写成FIFO,先来先服务),SCHED_RR(简写成RR,时间片轮流),SCHED_OTHER(下面简写成OTHER)。

这里大家就能看出一个问题,采用同等调度政策的进程之间自然有可比性,Linux3种调度政策并存,那么不同调度政策间的进程如何比较呢?可以说他们之间根本就没有可比性。

其实在调度时候,调度只看一个指标,那就是各个进程所具有的权值,权值最大的且在可执行队列中排在最前面的就会被调度执行。

而权值的计算才会设计到各方面因素,其中调度政策可以说在计算权值中,份量是最重的。

为什么Linux要这么干呢?这是由于事务的多样性决定的,进程有实时性进程和非实时性的进程2种,FIFO和RR是用来支持实时性进程的调度,我们看一下这3种政策下权值的计算公式就明白了: FIFO和RR计算公式,权值=1000+进程真正的运行时间 OTHER计算公式,当时间片为0时,权值=0.当时间片不为0时候,权值=剩余时间片+20-nice,同时如果是内核线程有+1的小加分,这是因为内核线程无需用户空间的切换,所以给它加了一分,奖励他在进程切换时候开销小的功劳。

时间片好理解,那么nice这个值,用过linux系统的人都知道,这是一个从unix下继承过来的概念,表示谦让度,是一个从20~-19的数,可以通过nice和renice指令来设置。

从代码中也能看到值越小就越不会谦让他人。

从这里我们看出FIFO和RR至少有1000的基数,所以在有FIFO和RR调度政策进程存在时,OTHER进程是没有机会被调度的到的。

从权值计算公式同时也能看出,FIFO先来先服务的调度政策满足了,但RR这个时间片轮流的调度如果按照这种权值计算是不能满足时间片轮流这一概念的。

这里只是权值的计算,在调度时候对RR政策的进程特殊处理。

以上都是权值计算,下面看看真正的调度过程,首先是对RR政策进程的特殊处理,如果当前进程采用的RR政策,那么看他的时间片是否用完,用完了就踢到就绪队列尾部,同时恢复他的时间片。

然后是便利整个就绪队列,找到第一个权值最大的进程来运行。

整体调度效果就是:如果有FIFO和RR政策的进程,就优先调度他们2个,他们之间看已执行时间长短决定胜负,而2种政策内部则遵守各自调度政策。

而OTHER只有在前面2种不存在于就绪队列时候才有可能执行,他们实际也是轮流执行,但他们之间是靠剩余时间和NICE值来决定胜负。

同时就绪队列中排在最前面的最优先考虑在同样权值情况下。

Linux系统内核空间主要由?

linux系统内核空间主要由5个部分组成:分别是内存管理,进程管理,进程间通信,虚拟文件系统和网络接口。

linux普通用户如何修改最大进程数限制求?

# su – xxx(普通用户)

su: 无法设置用户ID: 资源暂时不可用

# ulimit -u

1024

由此可以看出最大线程数为1024

修改最大线程数的配置

# vi /etc/security/limits.d/90-nproc.conf

内容如下:

* soft nproc 1024

root soft nproc unlimited

上面可以看除了root用户外的所有用户均限制为1024,因此通过可以注释此行或者将值改大来解决该问题修改完成后保存退出,这样的修改是立马生效的