当前位置: 首页 > news >正文

服务器调制、调试和测试

最大文件符

文件描述符是服务器程序的宝贵资源,几乎所有的系统调用都是和文件描述符打交道。系统分配给应用程序的文件描述符数量是有限制的,所以我们必须总是关闭那些已经不再使用的文件描述符,以释放它们占用的资源。比如作为守护进程运行的服务器程序就应该总是关闭标准输入、标准输出和标准错误这3个文件描述符。

Linux对应用程序能打开的最大文件描述符数量有两个层次的限制:用户级限制和系统级限制。用户级限制是指目标用户运行的所有进程总共能打开的文件描述符数﹔系统级的限制是指所有用户总共能打开的文件描述符数。

下面这个命令是最常用的查看用户级文件描述符数限制的方法:

ulimit -n//查看用户级文件描述符
ulimit -SHn max-flie-number//修改(暂时有效)

#在/etc/security/limits.conf加入
hard nofile max-flie-number//系统的硬限制
sortnofile max-flie-number

内核参数

几乎所有的内核模块,包括内核核心模块和驱动程序,都在/proc/sys文件系统下提供了某些配置文件以供用户调整模块的属性和行为。通常一个配置文件对应一个内核参数,文件名就是参数的名字,文件的内容是参数的值。我们可以通过命令sysctl -a查看所有这些内核参数将讨论其中和网络编程关系较为紧密的部分内核参数。

/proc/sys/fs:

/proc/sys/fs/file-max,系统级文件描述符数限制。直接修改这个参数和s上面讨论的修改方法有相同的效果(不过这是临时修改)。一般修改/proc/sys/fs/file-max后,应用程序需要把/proclsys/fs/inode-max 设置为新/proc/sys/fs/file-max值的3~4倍,否则可能导致i节点数不够用。

/proc/sys/fs/epoll/max_user_watches,一个用户能够往epoll 内核事件表中注册的事件的总量。它是指该用户打开的所有epoll实例总共能监听的事件数目,而不是单个epoll实例能监听的事件数目。往epoll内核事件表中注册一个事件,在32位系统上大概消耗90字节的内核空间,在64位系统上则消耗160字节的内核空间。所以,这个内核参数限制了epoll使用的内核内存总量。

/proc/sys/net:

/proc/sys/netlcore/somaxconn,指定listen 监听队列里,能够建立完整连接从而进入ESTABLISHED或者SYN_RCVD状态的socket 的最大数目。

proc/sys/net/ipv4/tcp_wmem,它包含3个值,分别指定一个socket 的TCP写缓冲区的最小值、默认值和最大值。

proc/sys/net/ipv4/tcp_rmem,它包含3个值,分别指定一个socket的TCP读缓冲区的最小值、默认值和最大值。在代码清单3-6中,我们正是通过修改这个参数来改变接收通告窗口大小的。

proc/sys/net/ipv4/tcp_syncookics,指定是否打开TCP同步标签(syncookie)。同步标签通过启动cookic来防止一个监听socket因不停地重复接收来自同一个地址的连接青求(同步报文段),而导致listen监听队列溢出(所谓的SYN风暴)。

除了通过直接修改文件的方式来修改这些系统参数外,我们也可以使用sysctl命令来修改它们。这两种修改方式都是临时的。永久的修改方法是在/etc/sysctl.conf文件中加入相应网络参数及其数值,并执行sysctl -p使之生效,就像修改系统最大允许打开的文件描述符数那样。

压力测试

压力测试程序有很多种实现方式,比如I/O复用方式,多线程、多进程并发编程方式,以及这些方式的结合使用。不过,单纯的IO复用方式的施压程度是最高的,因为线程和进程的调度本身也是要占用一定CPU时间的。

相关文章:

  • 神经网络深度学习(三)优化器
  • Altium Dsigner 20 工艺参数设置修改
  • 2022“杭电杯” 中国大学生算法设计超级联赛(10)1 4题解
  • ssh免密登陆
  • 神经网络深度学习(二)激活函数
  • Java_Servlet处理请求流程
  • cadence SPB17.4 - allegro - modify shape
  • AJAX详细教程
  • 关于 在国产麒麟系统上使用QProcess配合管道命令执行shell命令获取预期结果输出失败 的解决方法
  • docker进阶——docker网络简解
  • 2022/09/01 day01:Git概述
  • 2022/09/02 day02:连接远程仓库,推送、克隆
  • 第18章linux系统-备份与恢复
  • 2022/09/03 day03:搭建私有git服务器与IDEA中使用Git
  • VScode+esp-idf:例程(esp32-web-camera)保存图片到sd卡
  • 【剑指offer】让抽象问题具体化
  • angular2开源库收集
  • Apache的基本使用
  • es6--symbol
  • extjs4学习之配置
  • JavaScript类型识别
  • rc-form之最单纯情况
  • sessionStorage和localStorage
  • vue数据传递--我有特殊的实现技巧
  • 动态规划入门(以爬楼梯为例)
  • 分布式熔断降级平台aegis
  • 分类模型——Logistics Regression
  • 基于Dubbo+ZooKeeper的分布式服务的实现
  • 批量截取pdf文件
  • 如何设计一个微型分布式架构?
  • 手写一个CommonJS打包工具(一)
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 问题之ssh中Host key verification failed的解决
  • 追踪解析 FutureTask 源码
  • ​如何防止网络攻击?
  • # 安徽锐锋科技IDMS系统简介
  • ###C语言程序设计-----C语言学习(3)#
  • #中的引用型是什么意识_Java中四种引用有什么区别以及应用场景
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (done) 两个矩阵 “相似” 是什么意思?
  • (ibm)Java 语言的 XPath API
  • (JSP)EL——优化登录界面,获取对象,获取数据
  • (二开)Flink 修改源码拓展 SQL 语法
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (简单有案例)前端实现主题切换、动态换肤的两种简单方式
  • (四) 虚拟摄像头vivi体验
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (学习日记)2024.04.04:UCOSIII第三十二节:计数信号量实验
  • (一)基于IDEA的JAVA基础10
  • **PHP二维数组遍历时同时赋值
  • ./configure、make、make install 命令
  • .[hudsonL@cock.li].mkp勒索病毒数据怎么处理|数据解密恢复
  • .java 9 找不到符号_java找不到符号
  • .Net 6.0 处理跨域的方式