Linux内核中是怎么实现min和max函数

Linux内核中是怎么实现min和max函数,第1张

如果要看这两个函数在标准库中的定义用ctags或cscope生成索引.h,cscope,可以跳转到函数定义,man malloc,声明见stdlib。 如果仍然找不到,可以用ctags,si或grep。 windows下用source insight也可,然后查找函数定义,用grep -r 搜索关键字

内核threads线程数是一定的,具体是跟机器内存有关系

部分参数获取方法

PAGE_SIZE:getconf PAGE_SIZE 单位byte

THREAD_SIZE:ulimit -s

额定具体计算如下

max_threads = mempages / (THREAD_SIZE/PAGE_SIZE) / 8

mempages计算

mempages = 物理内存大小/PAGE_SIZE

例如:32G内存

mempages = 32174 * 1024 * 1024/4*1024 = 8236544

max_threads = 8236544/(8 1024)/(4 1024)/8 = 514784

因为为了保证每个用户进程总数不至于超过一半内存fork_init()指定:

init_task.rlim[RLIMIT_NPROC].rlim_cur = max_threads/2

init_task.rlim[RLIMIT_NPROC].rlim_max = max_threads/2

即物理额定线程数为514784/2=257392

配置 Linux 内核参数(2种方法),修改后不用重启动更新: /sbin/sysctl -p第一种:打开/etc/sysctl.conf 复制如下内容kernel.shmall = 2097152kernel.shmmax = 2147483648kernel.shmmni = 4096kernel.sem = 250 32000 100 128fs.file-max = 65536net.ipv4.ip_local_port_range = 1024 65000net.core.rmem_default=262144net.core.wmem_default=262144net.core.rmem_max=262144net.core.wmem_max=262144第二种:打开终端cat >>/etc/sysctl.conf< kernel.shmall = 2097152kernel.shmmax = 2147483648kernel.shmmni = 4096kernel.sem = 250 32000 100 128fs.file-max = 65536net.ipv4.ip_local_port_range = 1024 65000net.core.rmem_default=262144net.core.wmem_default=262144net.core.rmem_max=262144net.core.wmem_max=262144EOF这里,对每个参数值做个简要的解释和说明。 (1)shmmax:该参数定义了共享内存段的最大尺寸(以字节为单位)。缺省为32M,对于oracle来说,该缺省值太低了,通常将其设置为2G。 (2)shmmni:这个内核参数用于设置系统范围内共享内存段的最大数量。该参数的默认值是 4096 。通常不需要更改。 (3)shmall:该参数表示系统一次可以使用的共享内存总量(以页为单位)。缺省值就是2097152,通常不需要修改。 (4)sem:该参数表示设置的信号量。 (5)file-max:该参数表示文件句柄的最大数量。文件句柄设置表示在linux系统中可以打开的文件数量。 修改好内核以后,执行下面的命令使新的配置生效。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7148023.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-02
下一篇 2023-04-02

发表评论

登录后才能评论

评论列表(0条)

保存