Linux零碎记录之ulimit【堆栈大小、stack size、进程数限制、文件句柄限制、linux用户空间限制】...

2023-05-16

写了个小程序 本来打算写个hash表的,但是出现“段错误”


#include<stdio.h
struct a{
char a[4096];
char a1[4096];
char a2[4096];
char a3[4096];
};
int main(){
struct a b[1500];
int i=0;
for(;i<1500;i++)
memset(b.a,oxff,4096);
sleep(2000);
}

我就在纳闷,不就是分配点空间,怎么就不行了?

后来知道,原来这是stack size 堆大小 达到最大后,就错误了。

在Linux下,这个其实是可以设置的。

使用 ulimit命令即可设置,不但可以设置这个,还可以设置其他很多限制,使用ulimit -a可以查看当前的设置。


ayanmw@ayanmw-desktop:~/server_epoll$ ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 20
file size (blocks, -f) unlimited
pending signals (-i) 16382
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 4096
cpu time (seconds, -t) unlimited
max user processes (-u) unlimited
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited

 

看到stack size居然是8192KB。

程序一般是分为 堆 和 栈,堆 是存放变量名称的地方,比如指针一个指针 本身占用4个字节,指向一个32位地址(64位系统加倍),一般的变量比如int a,这里a的名称也是一个变量,指向存有值的a的空间地址。

而栈就是放数据的地方,只要内存还有,就可以一直分配,不信你可以使用 一个指针,然后malloc(599999)的大小,进程占用内存就有几十MB了。

可以看到,linux下还可以设置文件大小,打开的文件的数量限制。等等。

============================================

以前发现普通用户无法修改ulimit,root用户 可以.

百度搜索得到:

/etc/security/limits.conf

添加

*               soft  nofile  8192
*               hard    nofile  8192

可以修改.

CentOS 或 RedHat这个文件的路径貌似是:

[oracle@qs-xezf-db2 ~]$ cat /etc/sysconfig/limits.conf

oracle              soft    nproc   2047

oracle              hard    nproc   16384

oracle              soft    nofile  1024

oracle              hard    nofile  65536

修改文件应该就可以达到效果了.

有人说:在/root/.bashrc中增加:
ulimit -u unlimited
ulimit -n 10240
不一定管用.- -

sysctl -a 可以查看更多系统配置信息.

 

 

1、cat /proc/sys/fs/file-max,可以获得整个系统的文件句柄数目。一般是8192。如果希望增加句柄的总数,可以在脚本/etc/rc.d/rc..local中添加一行:echo 10240 >; /proc/sys/fs/file-max  (举例)

不解:使用lsof -f|wc -l 可以看到当前系统的打开文件总数,我的一台邮件服务器在最疯狂的时候曾输出值为4万!!!就是说同时打开了(或未完全关闭)4万个文件链接。而file-max值为8192,为什么??

2、通过设置/etc/security/limits.conf,实现控制每个进程的文件句柄数目。

添加两行:   *      soft     nofile    1024
                  *      hard    nofile    8192

确认/etc/pam.d/system-auth文件中有下面一行:session required /lib/security/pam_limits.so

如果说每个进程能打开的文件句柄数目限制为8192,那该进程产生的线程所打开的文件句柄数目是限在该8192内?还是又一个8192呢?

 

这个问题,最后采取了一个比较简单的方法:
在/boot/.bashrc中加入:
ulimit -u unlimited
ulimit -n 20480

然后所有普通用户的open files都变为20480了,用户最大进程数变为ulimited了。

 

我看到有的地方说AS3要该进程数只能在
1、设置fd_set支持的最大数量
 a、修改/usr/include/bits/typesizes.h 
  #define __FD_SETSIZE 1024 --->; 65536 
 b、修改/usr/src/linux/include/linux/posix_types.h  
  #define __FD_SETSIZE 1024 --->; 65536 

2、修改/usr/src/linux/include/linux/fs.h 
  设置最大打开文件数量(TCP连接数量) 
  #define INR_OPEN 1024 --->; 65536 
  #define NR_FILE 8192 --->; 65536 
  #define NR_RESERVED_FILES 10 --->; 128 
3、修改/usr/src/linux/include/net/tcp.h 
  a、设置TIMEOUT的时间为1秒 
  #define TCP_TIMEWAIT_LEN (60*HZ) 60 --->; 1*HZ 
  b、设置在backlog队列里的半连接的重试次数,每次都会花相应的时间,本质上也是减少重试时间 
  #define TCP_SYNACK_RETRIES 5 --->; 3 

然后通过编译内核的方式来增加, 这样比ulimit 更直接修改内核参数.因为内核 是编译出来的.

 

压力测试:

yuan@yuan-desktop:~$ ab -n 30000 -c 5000 http://localhost/
This is ApacheBench, Version 2.0.40-dev <$Revision: 1.146 $> apache-2.0
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Copyright 2006 The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost [through 218.19.166.24:3129] (be patient)
socket: Too many open files (24)
提示出错 上网查到是socket系统默认为1024 大于该直就报错 修改.

 

参考:http://www.chinaunix.net/jh/4/563088.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux零碎记录之ulimit【堆栈大小、stack size、进程数限制、文件句柄限制、linux用户空间限制】... 的相关文章

  • Visual Studio 与 Visual C++ 关系

    Visual Studio netVisual C 43 43 netVisual C 43 43 MSC VER备注Visual Studio net 2002Visual C 43 43 net 2002Visual C 43 43 7
  • C语言之基本算法08—去掉最高分去掉最低分求平均值

    61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61 61
  • MySQL -- Fast Index Creation

    1 fast index creation简介 MySQL5 5之后 xff0c 对innodb表创建或删除辅助索引的效率提升了很多 xff0c 即增加了新的功能fast index creation 因为MySQL5 5之后 xff0c
  • .NET Core2.0 环境下MVC模式的支付宝扫码支付接口-沙箱环境开发测试

    所有配置以及相关信息均可以从PC支付中获取 使用的生成二维码的组件名为QRCoder xff0c 该组件引用了一个第三方实现的System Drawing类库 xff0c 和支付宝官网类似 当面付SDK为Alipay AopSdk F2FP
  • 让自己的网站实现在线编辑office文档

    我们可以通过Office Web Apps xff08 OWA xff09 来实现在线编辑word xff0c excel xff0c power point xff0c one note xff0c 并集成到自己的网站里去 1 准备工作
  • 设置openjdk docker容器的时区

    openjdk 8 jre镜像是基于debian系统的 默认时区是UTC 下面两个方法都可以把时区改为Asia Shanghai 启动java应用时设置jvm参数 jvm参数 Duser timezone 61 Asia ShangHai
  • MYSQL的longtext字段能放多少数据?

    生产上遇到问题 xff0c 同事说MYSQL里的字段放不下5m大小的数据 于是 xff0c 将django model里textfield里的max length变长了 依然无效 xff0c 于是 xff0c 更改mysql的设置 xff1
  • 排查CentOS 7中chronyc sources 时间无法同步问题

    chronyc sources结果显示 controller 这表示时间同步服务器不可到达 经以下步骤成功排除错误 xff0c 供参考 在控制节点 1 检查controller节点服务器的时间同步服务是否开启成功 systemctl sta
  • SIM900A

    介绍 本文介绍SIM900A模块 xff0c 并给出一个使用教程 玉照 caption id 61 34 attachment 2625 34 align 61 34 alignnone 34 width 61 34 350 34 SIM9
  • C#读取excel的有效行数或者最大有效列数

    using System using System Collections Generic using System Linq using System Text using NPOI SS UserModel using NPOI HSS
  • [RQNOJ]PID1-明明的随机数

    http www rqnoj cn problem 1 1 include lt stdio h gt 2 include lt stdlib h gt 3 4 用法 xff1a void qsort void base int nelem
  • arguments

    arguments是什么 xff1f 答 是一个对象 xff0c 是一个长的很像数组的对象 arguments内容是什么 xff1f 答 arguments是函数运行时的实参列表 函数运行期间 xff0c 关键的三个对象 AO 本函数AO上
  • xcode5项目图标添加

    转载文章 地址http www 360doc com content 14 0103 08 14615320 342227413 shtml 最近提交itunesconnect应用时 xff0c 有个警告说缺少120x120图标 xff0c
  • 三款扒站神器

    https www shiyanlou com questions 80548 10个 webzip xff0c HTTrack Website Copier xff0c teleport pro 我主要用2 个配合起来使用 xff0c 效
  • kubeadm部署kubernetes 1.13.1集群

    kubeadm是Kubernetes官方提供的用于快速部署Kubernetes集群的工具 xff0c 本篇文章使用kubeadm搭建一个单master节点的3节点k8s集群 kubernetes部署dashboard可视化插件 xff1a
  • curl 同时发送多个请求

    创建一对cURL资源 ch1 61 curl init ch2 61 curl init 设置URL和相应的选项 curl setopt ch1 CURLOPT URL 34 http test cm a php 34 curl setop
  • 网络通信第四课 C++发送Post请求的完整案例

    说明 当前例子采用boost asio库发送HTTP数据报文 xff0c 采用boost asio streambuf request流封装数据报文 xff0c 在例子的后面 通过string对响应数据包进行分析 xff0c 获取其中的js
  • 玩转X-CTR100 l STM32F4 l BMP280气压计传感器

    我造轮子 xff0c 你造车 xff0c 创客一起造起来 xff01 塔克创新资讯 塔克社区 www xtark cn 塔克博客 www cnblogs com xtark 本文介绍X CTR100控制器 扩展BMP280气压计传感器 xf
  • arduino连接LCD1602A

    接线图 caption id 61 34 attachment 1183 34 align 61 34 alignnone 34 width 61 34 1108 34 LCD1602A接线图 xff08 4位 xff09 caption
  • CURL详解

    目前为目最全的CURL中文说明了 学PHP的要好好掌握 有很多的参数 大部份都很有用 真正掌握了它和正则 一定就是个采集高手了 PHP中的CURL函数库 xff08 Client URL Library Function xff09 cur

随机推荐

  • C++各种类库介绍(转)

    C 43 43 类库介绍 再次体现了C 43 43 保持核心语言的效率同时大力发展应用库的发展趋势 在C 43 43 中 xff0c 库的地位是非常高的 C 43 43 之父 BJARNESTROUSTRUP先生多次表示了设计库来扩充功能要
  • 跨平台C++开源码的两种经常使用编译方式

    作者 xff1a 朱金灿 来源 xff1a http blog csdn net clever101 跨平台C 43 43 开源代码为适应各种编译器的编译 xff0c 採用了两种方式方面来适配 一种是makefile方式 以著名的空间数据格
  • 暗渡陈仓:用低功耗设备进行破解和渗透测试

    信息安全技术丛书 暗渡陈仓 xff1a 用低功耗设备进行 破解和渗透测试 Hacking and Penetration Testing with Low Power Devices 美 菲利普 布勒斯特拉 xff08 Philip Pol
  • EPG

    简介 EPG 是Electronic Program Guide的 英文缩写 xff0c 意思是电子节目菜单 IPTV所提供的各种业务的索引及导航都是通过 EPG系统来完成的 IPTV EPG实际上就是 IPTV的一个门户系统 EPG系统的
  • 什么是寄存器

    我们看到的 STM32 芯片已经是已经封装好的成品 xff0c 主要由内核和片上外设组成 若与 电脑类比 xff0c 内核与外设就如同电脑上的 CPU 与主板 内存 显卡 硬盘的关系 STM32F429 采用的是 Cortex M4 内核
  • 编程-函数栈与进程栈

    https mp weixin qq com s QsY3cwpLQ5qthgrpZJkBng 一 代码编程极简进化史 从纸带上的机器码 xff0c 到汇编语言算是比较自然而然的变化 因为汇编语言每一条指令即对应着一条机器指令码 汇编中的j
  • 开源飞控

    OpenPilot 官网 xff1a http www openpilot org WiKi xff1a http wiki openpilot cc 论坛 xff1a http bbs tryfly cn forum php KK飞控 M
  • Windows Server 2008r2 取消屏幕自动锁定

    Windows Server 2008r2取消屏幕锁定 企业网管在日常维护服务器的时候 xff0c 往往不会每次有问题都去机房处理 xff0c 一般都是通过远程连接到服务器终端上 xff0c 但是很多企业网管总是被Server 2008服务
  • JAVA中对List<Map<String,Object>>中的中文汉字进行排序

    转载于 xff1a http blog csdn net flykos article details 54631573 参考 xff1a http www jb51 net article 88710 htm 本篇文章 xff0c 对中文
  • Python maketrans() 方法

    描述 Python maketrans 方法用于给 translate 方法创建字符映射转换表 可以只接受一个参数 xff0c 此时这个参数是个字典类型 xff08 暂不研究这种情况 xff09 对于接受两个参数的最简单的调用方式 xff0
  • vue-cli3 项目从搭建优化到docker部署

    项目地址 vue cli3 project 欢迎 star 原文地址 www ccode live lentoo list 1 创建一个vue项目 相信大部分人都已经知道怎么创建项目的 xff0c 可以跳过这一节 xff0c 看下一节 1
  • 解决Linux:No route to host

    在VPS上面配置了某分布式服务 xff0c 死活跑不起来 xff0c 该配置的都配置了 xff0c 真是见鬼了 日志里面很多 xff1a No route to host 但是 xff0c 我能ping通 xff0c 为了排除是程序自身原因
  • 停止linux的ntpd服务

    service ntpd status service ntpd stop service ntpd status chkconfig list ntpd chkconfig level 35 ntpd off chkconfig list
  • 09.打印“caoliuzhenhao”

    printf 命令用于格式化输出 xff0c 是echo命令的增强版 它是C语言printf 库函数的一个有限的变形 xff0c 并且在语法上有些不同 注意 xff1a printf 由 POSIX 标准所定义 xff0c 移植性要比 ec
  • http://www.seattletechinterviews.com/

    http www seattletechinterviews com 转载于 https www cnblogs com kungfupanda p 6503751 html
  • inode的若干锚

    insert inode hash hash an inode 64 inode unhashed inode 64 hashval unsigned long value used to locate this object in the
  • Swap Nodes in Pairs

    Given a linked list swap every two adjacent nodes and return its head For example Given 1 gt 2 gt 3 gt 4 you should retu
  • Redis

    介绍 官网 xff1a http redis io Redis是一个开源的使用ANSI C语言编写 支持网络 可基于内存亦可持久化的日志型 Key Value数据库 xff0c 并提供多种语言的API 从2010年3月15日起 xff0c
  • 转 C++常用的类库

    1 系统和网络编程库 xff1a ACE 除了ACE之外 xff0c 还有很多系统和网络编程方面的程序库 比如在线程库方面 xff0c 还有ZThread boost thread xff0c 如果放大到C C 43 43 领域 xff0c
  • Linux零碎记录之ulimit【堆栈大小、stack size、进程数限制、文件句柄限制、linux用户空间限制】...

    写了个小程序 本来打算写个hash表的 xff0c 但是出现 段错误 include lt stdio h struct a char a 4096 char a1 4096 char a2 4096 char a3 4096 int ma