导读

作为Java开发者linux修改内核参数,必可防止的须要开发或使用一些中间件,对于Java开发的中间件,不仅JVM参数必须调整外,Linux的一些内核参数也必需要调整,这儿几个,仅供参考。

无非都是跟c盘文件IO、网络通讯、内存管理、线程数目有关系的,由于我们的中间件系统在运行的时侯无非就是跟那些打交道。

vm.overcommit_memory

这个参数有三个值可以选择,0、1、2。

假如值是0的话,在你的中间件系统申请显存的时侯,操作系统内核会检测可用显存是否足够,假如足够的话就分配显存给你,假如觉得剩余显存不是太够了,干脆就拒绝你的申请,致使你申请显存失败,因而造成中间件系统异常出错。因而通常须要将这个参数的值调整为1,意思是把所有可用的化学显存都容许分配给你,只要有显存就给你来用,这样可以防止申请显存失败的问题。

例如我们以前线带环境布署的Redis就由于这个参数是0,致使在save数据快照到c盘文件的时侯,须要申请大显存的时侯被拒绝了,从而引起了异常报错。

可以用如下命令更改:

echo 'vm.overcommit_memory=1' >> /etc/sysctl.conf

vm.max_map_count

这个参数的值会影响中间件系统可以开启的线程的数目,同样也是十分重要的。

假如这个参数过小linux软件下载,有的时侯可能会造成有些中间件难以开启足够的线程,因而造成报错,甚至中间件系统死掉。

他的默认值是65536,然而这个值有时侯是不够的linux修改内核参数,例如我们大数据团队的生产环境布署的Kafka集群以前有一次就报出过这个异常,说难以开启足够多的线程,直接造成Kafka宕机了。

可以用如下命令更改:

echo 'vm.max_map_count=655360' >> /etc/sysctl.conf

vm.swappiness

这个参数是拿来控制进程的swap行为的,这个简单来说就是操作系统会把一部份c盘空间作为swap区域,之后假如有的进程如今可能不是太活跃,都会被操作系统把进程调整为睡眠状态,把进程中的数据装入c盘上的swap区域,之后让这个进程把原先占用的显存空间腾下来,交给其他活跃运行的进程来使用。

假如这个参数的值设置为0,意思就是尽量别把任何一个进程放在c盘swap区域去,尽量你们都用化学显存。

假如这个参数的值是100,这么意思就是尽量把一些进程给放在c盘swap区域去,显存腾下来给活跃的进程使用。

默认这个参数的值是60,有点偏低了,可能会造成我们的中间件运行不活跃的时侯被迫腾出显存空间之后放c盘swap区域去。因而一般在生产环境建议把这个参数调整小一些,例如设置为10,尽量用化学显存,别放c盘swap区域去。

可以用如下命令更改:

echo 'vm.swappiness=10' >> /etc/sysctl.conf

ulimit

这个是拿来控制linux上的最大文件联接数的,默认值可能是1024,通常肯定是不够的,由于你在大量频繁的读写c盘文件的时侯,或则是进行网路通讯的时侯,就会跟这个参数有关系

对于一个中间件系统而言肯定是不能使用默认值得,假如你采用默认值android linux,很可能在线上会出现如下错误:

error: too many open files

因而一般建议用如下命令更改这个值:

echo 'ulimit -n 1000000' >> /etc/profile

一点小小的总结

中间件系统肯定要开启大量的线程(跟vm.max_map_count有关)。

但是要进行大量的网路通讯和c盘IO(跟ulimit有关)。

之后大量的使用显存(跟vm.swappiness和vm.overcommit_memory有关)。

所以对OS内核参数的调整,常常也就是围绕跟中间件系统运行最相关的一些东西。

原文来自:

Author

这篇优质的内容由TA贡献而来

刘遄

《Linux就该这么学》书籍作者,RHCA认证架构师,教育学(计算机专业硕士)。

发表回复