调整内核参数
查看参数
不要把内核参数想象得太神秘,事实上,有很多参数是你自己就可以调整的。用下面这个命令在终端中执行试试看,结果是什么?
sudo sysctl -a | sort | more
是的,显示的就是一系列内核参数。即使你不用sudo,也可以看见大多数参数设置。这些显示的参数都很好理解,比如kernel.threads- max = 16379,就表示同时运行的最大进程数是16379个。也许你会奇怪,PID的最大值不是65536么?怎么这个设置小这么多?是的,这就是我在这里介 绍调整内核参数的原因。我们完全可以通过调整这个值来适应不同的系统,比如如果你的cpu频率很低,内存很小,就可以把这个值缩小一些。如果你的cpu很 棒,内存很足,就可以不用管它,甚至调大也行。这完全取决于你的机器配置,和你自己的想法。事实上,在你安装ubuntu的时候,它就会自动根据可用资源 来调整这个参数,所以不同机器上,这个参数可能是不同的。但是记住,机器调整的毕竟没有人调整的好,无法最大限度发挥系统的性能。
调整参数
好,我们现在已经可以看到很多内核参数了,那么,接下来的事情就是根据自己机器的情况来调整。通常有两种方法来调整参数,一种是在命令行下,通过类似命令
sudo sysctl -w kernel.threads-max=16000
这样来调整。这种方法调整过的参数会立刻生效,但是不会永久生效。什么意思呢?也就是说一旦你重新启动,所有改动就会消失。那这样岂不是毫无意义 么?所以还有第二种方法,就是直接修改/etc/sysctl.conf文件。这个文件本身没有任何内容,有的东西全部是注释,就等着你来修改。比如,你 可以将
kernel.threads-max=16000
这行命令加进去,这样,在重新启动之后,threads-max的值就会变成16000了。
通常,我们应该配合这两种办法来进行内核参数调整。首先用命令行形式调整,看看并测试直观的效果,如果比较满意,再把调整写入文件中。命令行调整的好处就是,不管你怎么胡乱修改,甚至导致系统错误,没关系,只要重新启动,一切就将恢复原样。
修改共享内存
在linux下,不同的应用程序可以共享同一块虚拟内存地址,这样方便不同程序之间的通信和信息共享,通常有两种共享内存的分配方式:临时和永久。 临时分配的意思就是在所有共享的应用程序都释放内存句柄,不再需要它时,内存就会被收回。而永久分配的意思就是即使没有任何应用程序使用它,这些共享内存 也会继续保持,这就有利于将状态保存于其中。
我们可以通过ipcs命令来查看进程间通信的状态。输入ipcs -m来浏览内存使用情况,显示结果为
—— Shared Memory Segments ——–
key shmid owner perms bytes nattch status
0×00000000 131073 windstorm 600 393216 2 dest
0×00000000 393218 windstorm 600 393216 2 dest
0×00000000 425987 windstorm 600 393216 2 dest
0×00000000 229380 windstorm 600 393216 2 dest
0×00000000 262149 windstorm 600 393216 2 dest
0×00000000 294918 windstorm 600 393216 2 dest
0×00000000 327687 windstorm 600 393216 2 dest
0×00000000 360456 windstorm 600 393216 2 dest
0×00000000 458761 windstorm 600 393216 2 dest
0×00000000 3964938 windstorm 600 393216 2 dest
0×00000000 524299 windstorm 600 393216 2 dest
……..
是不是有点晕了?我们可以看到一些共享内存的信息,包括共享内存ID,所有者,状态等等,但是这对于普通用户来说是不够的。你总得让我知道是谁在用吧?所以,我们应该使用下面这个命令
ipcs -m -p
来看看输出结果:
—— Shared Memory Creator/Last-op ——–
shmid owner cpid lpid
131073 windstorm 5473 4790
393218 windstorm 5568 4790
425987 windstorm 5566 4790
229380 windstorm 5413 5513
262149 windstorm 5490 8277
294918 windstorm 5512 4790
327687 windstorm 5496 7300
360456 windstorm 5496 7300
……..
好了,现在我们知道这些共享内存块分别是谁创建的(cpid),谁最近一次访问(lpid)。有时候,你会发现一些被遗弃的共享内存,就可以用ipcrm -m|-q|-s shm_id来删除共享内存信息。
但是通常情况下,如果所用的系统是作为数据库或者高性能网络服务器使用,我们更加关心的是如何分配更多的共享内存,而不是清除废弃的共享内存。那么首先,我们可以通过sysctl kernel | grep shm命令看看当前共享内存的分配情况。
sysctl kernel | grep shm
我的机器上果如下:
kernel.shmmni = 4096
kernel.shmall = 2097152
kernel.shmmax = 33554432
这是什么意思呢?这些数据表示,当前总共有33,554,432 bytes (32 MB)可用共享内存,每一个单独的程序最高能够分配到2,097,152 bytes,也就是2 MB,而最小的分配单元是4096 bytes。这些数据对于常用的应用来说完全足够了,但是如果是那种类似于数据库的高性能应用,可能你就需要考虑增大它们的数值了。修改方法?请参考“调 整参数”小节。
ipcs还有很多其他的查看方式,比如ipcs -m –t能够显示最近一次共享内存的访问的时间,ipcs -m –c则可以显示访问权限,请man ipcs来自行查阅更多用法。
声明:LUPA开源社区刊登此文只为传递信息,并不表示赞同或者反对。

迷你博客
日志
相册
群组
分享
电影
问答
停车游戏
奴隶游戏
开源大搜索
项目点评
礼品中心
职业评测
开源博客
考试练习
LW3DK开发
开源新闻
开源论坛
下载频道



查看全部评论(2) 最新评论