关于ulimit的问题

  1. ulimit 有软限制和硬限制
    1. 软限制起实际限制作用,但不能超过而硬限制(除非有root权限)【所以,ulimit默认显示的是软限制的值】
    2. 普通用户可以在硬限制范围内,更改自己的软限制
    3. 普通用户都可以缩小硬限制,但不能扩大硬限制。而root缩小扩大都可以
    4. 修改或查看限制可以用 ulimit 命令
  2. 我们一般都知道的文件为: /etc/security/limits.conf
  3. 我们很少关注目录: /etc/security/limits.d/     该目录下有时候也会存在相关配置,使得你怎么修改limits.conf 都不生效
  4. 我们经常的做法是修改limits.conf ,但是正确的做法应该是在limits.d/ 中添加一个文件,文件命名也有讲究,如:
    默认存在一个 90-nproc.conf,我们可以添加 91-nproc.conf 来覆盖前者
  5. sshd 会参考limits相关配置,并且是在ssh登录时参考的,不是在启动sshd时候参考的,所以,修改完limits相关配置,不需要重启sshd
  6. /etc/security/limits* 属于pam_limits 模块所属文件,如果必要的话,从pam中去掉该模块或者卸载该软件包也就不会受到这些限制了
  7. limits 的特点是超过限制就禁止启动或杀掉
  8. 每个进程都有一个 /proc/$pid/limits

有些限制是系统级别的,有些限制是进程级别的:

  1. open files: 单个进程打开文件最大数量限制
    1. 基本上也就是最大文件描述符的限制了,一些进程会据此for循环来关闭所有的文件描述符;所以,没有必要unlimited
  2. max user processes: 系统级别的
    1. 以uid为参考,如果当前已经达到或超过该数值限制,则禁止继续启动

参考:

 

 

关于free

比较新一点版本的free添加了available列,可以直接看出还有多少内存可用

 

比较老一点版本的free为:

3.3.9 版本的free就没有available列,另外,和内核版本也有关系,3.14 以后的内核是支持的; 2.6.27+ 的内核上是模拟出来的

man free

available
Estimation of how much memory is available for starting new applications, without swapping. Unlike
the data provided by the cache or free fields, this field takes into account page cache and also
that not all reclaimable memory slabs will be reclaimed due to items being in use (MemAvailable in
/proc/meminfo, available on kernels 3.14, emulated on kernels 2.6.27+, otherwise the same as free)

mysqld与mmap

不知不觉中,我的博客的mysql用的内存越来越多了,我的1核1G的主机有点儿内存不太够用了,一个偶尔的操作,mysqld被oom了,重启就报错,大概意思是:

因为我的机器只有1G内存,而且没有swap,mmap想map大于1g的文件,结果失败了;

比较大气的解决办法是: 加内存

比较小气的解决办法是: 加swap

关于容器oom

缘起:

偶尔有同学反应容器很慢,查看容器状态发现内存没用完了;问题是,oom命名是开启的,为什么不杀进程呢?

其实,我忽略了一个问题,为了不必要的内存浪费,我给每个容器都配备了相当多的swap,oom是发生在连swap都被用完的情况下的;上面的情况是:内存用完了,但是swap还足够,开始大量使用swap,于是乎,反应就很慢;不仅如此,swap引发的设备IO,是不受单个容器的IO配额限制的,在没有控制的情况下疯狂使用swap会导致其他容器也会变慢

结论:

容器之间的资源隔离是相对的,总是会有某些情况下,容器之间会相互影响的;有些场景下,这些问题都无所谓,有些情况下就是致命的

关于过程改进

“过程改进”是多么抽象的一个词语,没有说什么过程,也没有说改进什么,简直没法执行。

是的,过程改进对人的要求还是比较高的,首先,你要能发现需要改进的过程,然后你还要发现如何去改进;这里对人的一个重要要求就是: 你愿意。

我几乎没做一件事情都能发现做法需要优化,但是,很多人重复100遍都不会去思考是否可以改进一下,反而习以为常了。

有些事情,昨天这么做可能已经是很好的了,但是,今天还这么做可能就很落后了,所以,人要在实践的过程中不断地思考,不断地改进。

另外,能否进行“过程改进”和人的能力也有直接关系,对有些人来说,能正确执行现有流程已经是很高的要求了,改进是不可能的。

再者,也有人觉得,我已经觉得自己很优秀了,不需要改进了。

 

如何才能让每个人都积极地思考过程改进呢????