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

mudo服务器测试二

目录

业务处理超时测试

测试代码

客户端

服务端

同时多条请求测试

测试代码

客户端

服务端

大文件传输测试

测试代码

客户端

服务端

服务器性能压力测试说明

客户端

服务端


业务处理超时测试

测试代码

​
/* 业务处理超时,查看服务器的处理情况
    当服务器达到了一个性能瓶颈,在一次业务处理中花费了太长的时间(超过了服务器设置的非活跃超时时间)
     1. 在一次业务处理中耗费太长时间,导致其他的连接也被连累超时,其他的连接有可能会被拖累超时释放
     假设现在  12345描述符就绪了, 在处理1的时候花费了30s处理完,超时了,导致2345描述符因为长时间没有刷新活跃度
       1. 如果接下来的2345描述符都是通信连接描述符,如果都就绪了,则并不影响,因为接下来就会进行处理并刷新活跃度
       2. 如果接下来的2号描述符是定时器事件描述符,定时器触发超时,执行定时任务,就会将345描述符给释放掉
          这时候一旦345描述符对应的连接被释放,接下来在处理345事件的时候就会导致程序崩溃(内存访问错误)
          因此这时候,在本次事件处理中,并不能直接对连接进行释放,而应该将释放操作压入到任务池中,
          等到事件处理完了执行任务池中的任务的时候,再去释放
*/

#include "../source/server.hpp"

int main()
{
    signal(SIGCHLD, SIG_IGN); // 对僵尸进程进行忽略
    for (int i = 0; i < 10; i++)
    {
        pid_t pid = fork();
        if (pid < 0)
        {
            DBG_LOG("FORK ERROR");
            return -1;
        }
        else if (pid == 0)
        {
            Socket cli_sock;
            cli_sock.CreateClient(8080, "127.0.0.1");
            std::string req = "GET /hello HTTP/1.1\r\nConnection: keep-alive\r\nContent-Length: 0\r\n\r\n";
            while (1)
            {
                assert(cli_sock.Send(req.c_str(), req.size()) != -1);
                char buf[1024] = {0};
                assert(cli_sock.Recv(buf, 1023));
                DBG_LOG("[%s]", buf);
            }
            cli_sock.Close();
            exit(0);
        }
    }
    while (1)
        sleep(1);
    return 0;
}

​

请求添加一个休眠保证它超时

客户端

服务端

同时多条请求测试

测试代码

/*一次性给服务器发送多条数据,然后查看服务器的处理结果*/
/*每一条请求都应该得到正常处理*/

#include "../source/server.hpp"

int main()
{
    Socket cli_sock;
    cli_sock.CreateClient(8080, "127.0.0.1");
    std::string req = "GET /hello HTTP/1.1\r\nConnection: keep-alive\r\nContent-Length: 0\r\n\r\n";
    req += "GET /hello HTTP/1.1\r\nConnection: keep-alive\r\nContent-Length: 0\r\n\r\n";
    req += "GET /hello HTTP/1.1\r\nConnection: keep-alive\r\nContent-Length: 0\r\n\r\n";
    while(1) {
        assert(cli_sock.Send(req.c_str(), req.size()) != -1);
        char buf[1024] = {0};
        assert(cli_sock.Recv(buf, 1023));
        DBG_LOG("[%s]", buf);
        sleep(3);
    }
    cli_sock.Close();
    return 0;
}

客户端

服务端

客户端手动退出出现的情况

大文件传输测试

生成一个1G的大文件,里面全是0,因为是从/dev/zero里面取出来的,注意这个大概会占用2G内存,所以会传输失败,所以注意创建小一点

dd if=/dev/zero of=./hello.txt bs=1G count=1

在末尾插入一个字符 

echo "qingfengyugu" >> hello.txt

查看剩余内存,下面free对应的

大的不行会本机配置太低,所以改小进行测试

测试代码

/*大文件传输测试,给服务器上传一个大文件,服务器将文件保存下来,观察处理结果*/
/*
    上传的文件,和服务器保存的文件一致
*/
#include "../source/http/http.hpp"

int main()
{
    Socket cli_sock;
    cli_sock.CreateClient(8080, "127.0.0.1");
    std::string req = "PUT /1234.txt HTTP/1.1\r\nConnection: keep-alive\r\n";
    std::string body;
    Util::ReadFile("./hello.txt", &body);
    req += "Content-Length: " + std::to_string(body.size()) + "\r\n\r\n";
    assert(cli_sock.Send(req.c_str(), req.size()) != -1);
    assert(cli_sock.Send(body.c_str(), body.size()) != -1);
    char buf[1024] = {0};
    assert(cli_sock.Recv(buf, 1023));
    DBG_LOG("[%s]", buf);
    sleep(3);
    cli_sock.Close();
    return 0;
}

客户端

服务端

对比两者的md5值即可判断文件是否是相同的,传输也没有出现问题 

86017ba5a440349e0485675753016d4a -- 1234.txt

86017ba5a440349e0485675753016d4a -- hello.txt

服务器性能压力测试说明

查看当前服务器可以同时创建多少个进程

这个当你的资源不足的时候,可以用这个进行查看PID然后kill-9进行杀死

客户端

服务端

正常退出

至此测试工作完成~

后面再补一个整合


http://www.kler.cn/a/273797.html

相关文章:

  • 04、Redis深入数据结构
  • HarmonyOS鸿蒙开发 弹窗及加载中指示器HUD功能实现
  • 基于springboot的网上商城购物系统
  • 【算法】字符串算法技巧系列
  • SpringBoot | 使用Apache POI库读取Excel文件介绍
  • 如何在 Windows 10/11 上录制带有音频的屏幕 [3 种简单方法]
  • Visual Studio配置libtorch(cuda安装一步到位)
  • camelot pdf提取表格实践(记录)
  • 计算机网络拓扑结构
  • 通过spring boot/redis/aspect 防止表单重复提交【防抖】
  • 一键制作iOS上架App Store描述文件教程
  • 从SQL质量管理体系来看SQL审核(2) - SQL质量标准
  • 优化选址问题 | 粒子群算法求解物流选址问题含Matlab源码
  • Transformer的前世今生 day03(Word2Vec
  • 内盘期货交易系统的全开源代码
  • 代码随想录算法训练营第day31|455.分发饼干 ● 376. 摆动序列 ● 53. 最大子序和
  • 安装vcenter管理esxi
  • SD卡RAW故障解析与数据恢复全攻略
  • 24计算机考研调剂 | 【官方】山东师范大学(22自命题)
  • C#,图论与图算法,图(Graph)广度优先遍历(BFS,Breadth First Search)算法与源代码
  • android api 34 编译ffmpeg with libfdk-aac
  • Linux docker1--环境及docker安装
  • 【Excel自动化办公】使用openpyxl对Excel进行读写操作
  • 服务器病毒木马通用排查处理应急响应流程
  • 使用RabbitMQ,关键点总结
  • Samtec科普 | 一文了解患者护理应用连接器