博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
linux 高并发系统限制 设置
阅读量:6678 次
发布时间:2019-06-25

本文共 2304 字,大约阅读时间需要 7 分钟。

本文打算探讨两种设置方法,一种是在程序中动态设置,一种是在程序启动前的静态设置。

先说静态设置(具体设置见:):

1,在/etc/security/limits.conf中修改或者添加进程可打开文件数的软硬设置,

* soft nofile 10240

* hard nofile 10240

2,在/etc/pam.d/login中添加

session required /lib/security/pam_limits.so

3,查看linux系统最在打开文件数限制,cat /proc/sys/fs/file-max,根据需要,修改此设置:

echo 222222 > /proc/sys/fs/file-max

echo 222222 > /proc/sys/nr_open

# /proc/sys/fs/file-max 系统所有进程可打开的最大文件数目

# /proc/sys/nr_open 是单个进程可分配的最大文件数

# ulimit -f 网上有说是设置可创建(不是打开)的文件大小数目,

# man 一下看到的是本shell及其子shell可以打开的文件数目

以上步骤设置好后,可以用 ulimit -n 查看效果

4,修改系统可使用端口范围,/etc/sysctl.conf

    net.ipv4.ip_local_port_range = 1024 65000

    #net.ipv4.ip_conntrack_max = 10240,好像不存在本配置

修改后,使生效,sysctl -p

动态设置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <sys/capability.h>
#include <sys/prctl.h>
#include <sys/resource.h>
#include <iostream>
#include <errno.h>
using 
namespace 
std;
 
int 
main(
int 
argc, 
char 
*argv[])
{
    
int 
ret = prctl(PR_CAPBSET_READ,CAP_SYS_RESOURCE,0,0);
    
if 
(ret == 1)
        
cout<<
"CAP_SYS_RESOURCE enabled"
<<endl;
    
else
        
cout<<
"CAP_SYS_RESOURCE disabled"
<<endl;
 
    
struct 
rlimit rt,rt_new;
    
ret = getrlimit(RLIMIT_NOFILE,&rt);
    
if 
(ret != 0)
    
{
        
cout<<
"getrlimit error"
<<endl;
        
return 
0;
    
}
    
cout<<
"old soft limit:"
<<rt.rlim_cur<<
"\told hard limit:"
<<rt.rlim_max<<endl;
 
    
rt.rlim_cur = rt.rlim_max = 40960000;
    
ret = setrlimit(RLIMIT_NOFILE,&rt);
    
if 
(ret != 0)
    
{
        
cout<<
"setrlimt error:"
<<
errno
<<endl;
        
cap_t caps = cap_init();
        
cap_value_t caplist[2] = {CAP_SYS_RESOURCE,CAP_SETPCAP};
        
unsigned 
int 
num_caps = 2;
        
cap_set_flag(caps,CAP_EFFECTIVE,num_caps,caplist,CAP_SET);
        
cap_set_flag(caps,CAP_INHERITABLE,num_caps,caplist,CAP_SET);
        
cap_set_flag(caps,CAP_PERMITTED,num_caps,caplist,CAP_SET);
        
if 
(cap_set_proc(caps))
        
{
            
cout<<
"cap_set_proc failed"
<<endl;
            
return 
0;
        
}
        
ret = setrlimit(RLIMIT_NOFILE,&rt);
        
if 
(ret != 0)
        
{
            
cout<<
"setrlimit error:"
<<
errno
<<endl;
            
return 
0;
        
}
    
}
 
    
ret = getrlimit(RLIMIT_NOFILE,&rt_new);
    
if 
(ret != 0)
    
{
        
cout<<
"getrlimit error:"
<<
errno
<<endl;
        
return 
0;
    
}
    
cout<<
"new soft limit:"
<<rt_new.rlim_cur<<
"\tnew hard limit:"
<<rt_new.rlim_max<<endl;
    
return 
0;
}

编译前需要安装:libcap-devel

编译:g++ file.cpp -lcap

运行结果,设置不成功。

本文转自 hakuyo 51CTO博客,原文链接:http://blog.51cto.com/hakuyo/1875016,如需转载请自行联系原作者
你可能感兴趣的文章
matplotlib.pyplot如何绘制多张子图
查看>>
excel 常用设置
查看>>
[自制操作系统] BMP格式文件读取&图形界面系统框架/应用接口设计
查看>>
js !!条件判断或运算的作用
查看>>
记一次安装Nginx+php-fpm安装后无法解析.php文件,状态码200,但显示空白页
查看>>
BFC
查看>>
C++中++i与i++
查看>>
P1233 木棍加工
查看>>
小程序售票生成二维码---借助云开发获取小程序用户openid
查看>>
PowerManager和WakeLock的操作步骤
查看>>
C++文件操作
查看>>
洛谷P2605 基站选址
查看>>
用word写博客
查看>>
WCF 第四章 绑定 wsHttpBinding
查看>>
利用COOKIE保存历史浏览商品的一个简单思路
查看>>
论验收测试和回归测试区别
查看>>
数据库加密&证书创建
查看>>
Leetcode -- 1. two sum
查看>>
获取节点
查看>>
Firefly-RK3288开发板Android编译环境搭建开荒
查看>>