Linux25 -- 监听队列链接上限测试、命令uname、ulimit

news2025/3/12 10:55:25

一、监听队列链接上限测试

1、res = listen(sockfd,5);

    //创建监听队列
    res = listen(sockfd,5);

不懂版本有不同的限制,2.6早期版本有限制为128,超过默认为128,可使用uname -a 查看版本
在这里插入图片描述

2、测试将链接数到达上限,

方法:限制其accept,只让其去链接,观察最后链接了多少个。

运行结果:

发现有6个链接,有一个未完成三次握手,只发送了链接信息,但服务器端没有回复信息,导致客户端阻塞,延迟多发,多次尝试,当connect超时后,会自动退出。
在这里插入图片描述
在这里插入图片描述

3、res = listen(sockfd,3000); for( int i = 0; i < 4000; i++)

运行结果:

发现只能链接1021个,相比较于1024,少了3个?
0 1 2 --》标准输入、标准输出、标准错误输出
在这里插入图片描述

4、使用netstat -natp 命令,观察系统默认大小

在这里插入图片描述
在这里插入图片描述

5、利用 ulimit -n 命令调整

ulimit 用来限制每个用户可使用的资源,如CPU、内存、句柄等。

用法:ulimit [-SHacdefilmnpqrstuvx] [限制]

S:表示软限制,超出设定的值会告警。
H :表示硬限制,超出设定的值会报错。
a :列出系统所有资源限制的值
c:当某些程序发生错误时,系统可能会将该程序在内存中的信息写成文件(除错用),这种文 件就被称为核心文件(core file)。此为限制每个核心文件的最大容量
d:每个进程数据段的最大值
f:当前shell可创建的最大文件容量
l:可以锁定的物理内存的最大值
m:可以使用的常驻内存的最大值
n:每个进程可以同时打开的最大文件句柄数
p:管道的最大值
s:堆栈的最大值
t:每个进程可以使用CPU的最大时间
u:每个用户运行的最大进程并发数
v:当前shell可使用的最大虚拟内存

ulimit -a
ulimit -n //只显示能打开的文件最大值
ulimit -n 4096 //将文件链接大小改为4096

这里只是进行连接,并不进行数据传输,当前系统可以实现。
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

6、测试代码

test_cli.c 客户端代码

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main()
{

    //指定服务器的ip和端口
    struct sockaddr_in saddr;//定义一个套接字的地址,代表服务器的地址
    memset(&saddr,0,sizeof(saddr));
    saddr.sin_family = AF_INET;
    saddr.sin_port = htons(6000);//6000代表服务器的端口,系统随机分配自身的端口  1024以内属于知名端口,例如短号110等,只有管理员用户可使用  4096以内为保留端口  一般使用都锁使用4096以上
    saddr.sin_addr.s_addr = inet_addr("127.0.0.1");

    //循环创建套接字区connect链接
    for( int i = 0; i < 100; i++)
    {
        int sockfd = socket(AF_INET,SOCK_STREAM,0);
        if( sockfd == -1)//创建套接字失败
        {
            printf("creat socket failed\n");
            break;
        }
        
        int res = connect(sockfd,(struct sockaddr*)&saddr,sizeof(saddr));
        if( res == -1)
        {
            break;
        }
        printf(" i = %d\n",i);

    }
}

test_ser.c 服务器端

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int socket_init();

int main()
{
    int sockfd = socket_init();
    if( sockfd == -1)
    {
        exit(0);
    }
    
    //实现死循环,让程序一直运行
    while( 1 )
    {
        sleep(1);
    }
        
}
int socket_init()
{
    //创建一个在传输层使用tcp协议的一个套接字
    int sockfd = socket(AF_INET,SOCK_STREAM,0); //AF_INET --地址zhu,目前的固定的、服务类型 ---- tcp流式服务
    if(sockfd == -1)//创建失败
    {
        return -1;
    }

    //定义一个套接字地址,一个ipv4 专用的地址
    struct sockaddr_in saddr;
    memset(&saddr,0,sizeof(saddr));
    saddr.sin_family = AF_INET;
    saddr.sin_port = htons(6000);//网络字节 大端
    saddr.sin_addr.s_addr = inet_addr("127.0.0.1");//将字符串转成无符号整形

    //指定ip端口
    int res = bind(sockfd,(struct sockaddr*)&saddr,sizeof(saddr));
    if( res == -1)
    {
        printf("bind err\n");
        return -1;
    }

    //创建监听队列
    res = listen(sockfd,5);
    if( res == -1)
    {
        return -1;
    }
    
    return sockfd;

}

命令 uname -a 查看版本

在这里插入图片描述

命令 ulimit -a 显示系统中的一些限制

每次创建套接字,即一个文件描述符,一个进程最多能打开多少文件描述符?文件表的大小
在这里插入图片描述
可以看出,该程序只能打开1024个文件,只能得到1024个文件描述符。系统对其进行限制,可以进行更改

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/392939.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【安卓开发】探究服务

10.2 Android多线程编程 定义一个线程只需要新建一个类继承自Thread&#xff0c;然后重写父类的run方法&#xff0c;在里面编写耗时逻辑即可 class MyThread extends Thread{Overridepublic void run(){// 处理具体的逻辑} }那么如何启动呢 new Mythread().start() 这样继承的…

Hive拉链表

概述 拉链表&#xff1a;维护历史状态以及最新状态数据的表 作用场景 1. 数据量比较大。 2. 表中的部分字段会被更新&#xff0c;比如用户的地址&#xff0c;银行利率&#xff0c;订单的状态等。 3. 需要查看某一个时间点或者时间段的历史快照信息&#xff0c;比如&#xff0c;…

Linux GCC 编译详解

文章目录一、GCC 编译器简介二、GCC 工作流编程语言的发展GCC 工作流程gcc 和 g 的区别三、使用 GCC 编译GCC 编译格式GCC 编译流程多个源文件编译一、GCC 编译器简介 首先&#xff0c;什么是编译器呢&#xff1f; 我们可以使用编辑器&#xff08;如 linux 下的 vi、windows 下…

Tomcat安装步骤及详细配置教程

Tomcat安装及配置教程主要分为四步&#xff1a; 步骤一&#xff1a;首先确认自己是否已经安装JDK 步骤二&#xff1a;下载安装Tomcat 步骤三&#xff1a;Tomcat配置环境变量 步骤四&#xff1a;验证Tomcat配置是否成功 一、首先确认自己是否已经安装JDK WinR打开运行&…

sklearn手册(持续更新ing...)

诸神缄默不语-个人CSDN博文目录 本文是一个随时使用sklearn时可供参考的手册。我有使用sklearn的基础&#xff0c;且准备后期直接用sklearn官方的教程文档参考撰写系统性学习sklearn包使用方法的sklearn用户教程一文&#xff0c;因此本文就不介绍基础了。 最近更新时间&#…

ubuntu 20.04 Linux下查看当前文件夹的大小

问题描述 由于使用远程的 ssh 连接 ubuntu 20.04&#xff0c;所以不清楚如何查看 当前文件夹的大小 直接使用 df -h&#xff0c;只能查看 当前系统 磁盘的使用情况 需求 通过Linux shell 命令行&#xff0c;查看 当前文件夹占用的大小 其实很简单&#xff0c;使用 Linux sh…

如何使用码匠连接 Oracle

目录 在码匠中集成 Oracle 在码匠中使用 Oracle 关于码匠 Oracle 是一种关系型数据库&#xff0c;可用于存储和管理大量结构化数据。Oracle 数据源支持多种操作系统&#xff0c;包括 Windows、Linux 和 Unix 等&#xff0c;同时也提供了各种工具和服务&#xff0c;例如 Orac…

从设计转到了产品,实习生工作复盘

一、写在前面从设计转到了产品&#xff0c;产品的门槛好像相对于设计确实要低一些。通过产品新人必读书《人人都是产品经理》、知乎产品大神的观点和我个人的理解&#xff0c;可以得出一个结论——并不是每个人都是合格的产品经理&#xff0c;包括我在内的很多人都是因为公司有…

​2023年湖北武汉自己怎么报考二建?报考二建学历不符怎么办?启程别

2023年湖北武汉自己怎么报考二建&#xff1f;报考二建学历不符怎么办&#xff1f;启程别 2023年武汉自己怎么报考二建&#xff0c;首先个人是没有办法报名的&#xff0c;报考二建必须以企业的名义报名。报考二建的基本条件是什么&#xff1f;启程别告诉你&#xff0c;“启程别”…

Spark AQE

Spark AQEAQE/RBO/CBOAQEAQE特点Join 策略调整自动分区合并自动倾斜处理Spark 3.0 添加了自适应查询执行&#xff08;AQE&#xff09;、动态分区剪裁&#xff08;DPP&#xff09;、扩展的 Join Hints AQE/RBO/CBO Spark SQL 2.0前&#xff0c;仅支持启发式、静态的优化过程。…

mybatis面试题 一

一、MyBatis工作原理&#xff1f; 1、 创建SqlSessionFactory 2、 通过SqlSessionFactory创建SqlSession 3、 通过sqlsession执行数据库操作 4、 调用session.commit()提交事务 5、 调用session.close()关闭会话 1&#xff09;读取 MyBatis 配置文件&#xff1a;mybatis-c…

zynq7000系列芯片介绍

ZYNQ从架构上可以划分为两大模块&#xff0c;一个是PS&#xff08;处理器系统&#xff09;&#xff0c;另一个是PL&#xff08;可编程逻辑&#xff09; PS由APU、内存接口、IO外设、互连线4大模块组成。 1、APU&#xff08;Application Processor Unit)应用处理单元 即PS【可编…

面向对象设计模式:行为型模式之状态模式

文章目录一、引入二、状态模式2.1 Intent 意图2.2 Applicability 适用性2.3 类图2.4 Collaborations 合作2.5 Implementation 实现2.5 状态模式与策略模式的对比2.5 状态模式实例&#xff1a;糖果机2.6 状态模式实例&#xff1a;自行车升降档一、引入 State Diagram 状态图&am…

docker数据卷及软件部署方式

目录 一、docker数据卷管理 1.docker数据卷概念 2.数据卷命令 3.创建容器并挂载数据卷 二、docker软件部署 1.docker部署mysql方式 下载MySQL5.7镜像文件 创建所需的数据卷目录 创建mysql容器并挂载数据卷 进入数据库授权远程连接用户访问 2. docker部署nginx方式 下…

C语言-基础了解-16-C字符串

C字符串 一、C字符串 在 C 语言中&#xff0c;字符串实际上是使用空字符 \0 结尾的一维字符数组。因此&#xff0c;\0 是用于标记字符串的结束。 空字符&#xff08;Null character&#xff09;又称结束符&#xff0c;缩写 NUL&#xff0c;是一个数值为 0 的控制字符&#x…

剑指 Offer 31. 栈的压入、弹出序列

一、题目描述 输入两个整数序列&#xff0c;第一个序列表示栈的压入顺序&#xff0c;请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。 例如&#xff0c;序列 {1,2,3,4,5} 是某栈的压栈序列&#xff0c;序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列…

centos7 安装 hyperf

​​​​​​PHP > 7.4 Swoole PHP 扩展 > 4.5&#xff0c;并关闭了 Short Name OpenSSL PHP 扩展 JSON PHP 扩展 PDO PHP 扩展 Redis PHP 扩展 Protobuf PHP 扩展 composer create-project hyperf/hyperf-skeleton 推荐安装项 全部选n php.ini [swoole] extens…

LQB小板焊接V3版本的小板原理图,PCB图,注意事项和步骤

第一部分&#xff0c;这个部分&#xff0c;可以不焊接&#xff0c;直接用买的下载器进行下载代码&#xff0c;外接一个下载器&#xff0c;网上大概是10元左右&#xff0c;以后学习stm32的芯片的时候&#xff0c;这个下载器就是一个串口转换器&#xff0c;也可以使用。。 当然也…

realloc也可以缩容了??

作者&#xff1a;小树苗渴望变成参天大树 作者宣言&#xff1a;认真写好每一篇博客 作者gitee:gitee 如 果 你 喜 欢 作 者 的 文 章 &#xff0c;就 给 作 者 点 点 关 注 吧&#xff01; realloc的细节前言一、realloc的原地扩容和异地扩容二、关于realloc是否可以缩容问题前…

快速搭建本地服务器

一、anywhere 1、npm install anywhere -g 2、打开位于文件夹下的终端页&#xff0c;输入anywhere 9999 9999这里是设置端口号&#xff0c;端口号自行设置&#xff0c;也可以不输入xxx会默认8080端口号 二、http-server 1、npm install http-server -g 2、打开位于文件夹下…