• 系统性能测试


    在这里插入图片描述测试情况分析
    Mysql配置信息如下(docker容器默认配置):

    binlog_cache_size	32768
    binlog_row_event_max_size	8192
    binlog_stmt_cache_size	32768
    binlog_transaction_dependency_history_size	25000
    bulk_insert_buffer_size	8388608
    connection_memory_chunk_size	8912
    delayed_queue_size	1000
    histogram_generation_max_mem_size	20000000
    host_cache_size	279
    innodb_buffer_pool_chunk_size	134217728
    innodb_buffer_pool_size	134217728
    innodb_change_buffer_max_size	25
    innodb_ddl_buffer_size	1048576
    innodb_doublewrite_batch_size	0
    innodb_ft_cache_size	8000000
    innodb_ft_max_token_size	84
    innodb_ft_min_token_size	3
    innodb_ft_total_cache_size	640000000
    innodb_log_buffer_size	16777216
    innodb_log_file_size	50331648
    innodb_log_write_ahead_size	8192
    innodb_max_undo_log_size	1073741824
    innodb_online_alter_log_max_size	134217728
    innodb_page_size	16384
    innodb_purge_batch_size	300
    innodb_sort_buffer_size	1048576
    innodb_sync_array_size	1
    join_buffer_size	262144
    key_buffer_size	8388608
    key_cache_block_size	1024
    large_page_size	0
    max_binlog_cache_size	18446744073709547520
    max_binlog_size	1073741824
    max_binlog_stmt_cache_size	18446744073709547520
    max_heap_table_size	16777216
    max_join_size	18446744073709551615
    max_relay_log_size	0
    myisam_data_pointer_size	6
    myisam_max_sort_file_size	9223372036853727232
    myisam_mmap_size	18446744073709551615
    myisam_sort_buffer_size	8388608
    ngram_token_size	2
    optimizer_trace_max_mem_size	1048576
    parser_max_mem_size	18446744073709551615
    performance_schema_accounts_size	-1
    performance_schema_digests_size	10000
    performance_schema_error_size	5153
    performance_schema_events_stages_history_long_size	10000
    performance_schema_events_stages_history_size	10
    performance_schema_events_statements_history_long_size	10000
    performance_schema_events_statements_history_size	10
    performance_schema_events_transactions_history_long_size	10000
    performance_schema_events_transactions_history_size	10
    performance_schema_events_waits_history_long_size	10000
    performance_schema_events_waits_history_size	10
    performance_schema_hosts_size	-1
    performance_schema_session_connect_attrs_size	512
    performance_schema_setup_actors_size	-1
    performance_schema_setup_objects_size	-1
    performance_schema_users_size	-1
    preload_buffer_size	32768
    profiling_history_size	15
    query_alloc_block_size	8192
    query_prealloc_size	8192
    range_alloc_block_size	4096
    range_optimizer_max_mem_size	8388608
    read_buffer_size	131072
    read_rnd_buffer_size	262144
    rpl_read_size	8192
    select_into_buffer_size	131072
    sort_buffer_size	262144
    thread_cache_size	9
    tmp_table_size	16777216
    transaction_alloc_block_size	8192
    transaction_prealloc_size	4096
    
    • 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
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75

    持续请求4秒
    在这里插入图片描述
    在这里插入图片描述
    根据测试,单体jvm+单体mysql,对于插入操作最好的并发数量为200,当数据量超过50万进行插入操作时,最大操作时长变得无法接受(此时jvm所在服务器的cpu使用率为24%),与tomcat(默认连接数量为200)的最大连接数量相一致,接下来尝试将tomcat连接数量设置为300进行测试。
    在这里插入图片描述
    经过测试,300并发量和200并发量对于cpu的影响不是很大,300并发请求的cpu占用为26%,但是性能却没有过多的提升,怀疑是mysql的瓶颈,Mysql服务器cpu在300并发请求下cpu使用率为40%,查询mysql的连接配置,最大连接请求数发现并未达到设置的上限,因此现在考虑添加一个tomcat来处理请求。

    show variables like "%max_connections%";
    show global status like 'Max_used_connections';
    
    • 1
    • 2

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    以下的测试数据均为每秒持续请求
    在这里插入图片描述在这里插入图片描述
    在这里插入图片描述

    针对用户量很少的情况(单秒并发数量25-100以内,单体架构4核mysql+4核java应用)完全够用,这种情况下用每分用户要在250-1000。

    如果想提升性能,对于统计之类的查询最好借助于redis进行,因为mysql查询统计速度不高。单体redis对于2000并发量的请求还是可以应对的,所以在开发项目过程中能够使用redis缓存则使用redis缓存,根据性能统计,mysql的单秒写入可以达到200左右并发,如果可以将查询之类的全部放在redis中进行,将mysql的主要性能将只是放在写入和修改上面,程序可以在如何应对写入和修改上面下功夫。这时候应用的新增操作的每分钟需要有250-2000用户,那么总的用户量需要20万人。
    针对下单服务->库存服务,这样的并发量可以达到300左右(如果java服务器启动多台),主要也是mysql写入特性决定的。

    针对如上测试结果,对结构设计和代码有哪些帮助:
    1.代码中尽量思考如何使用redis进行代码编写;
    2.对于记录日志之类的操作,可以考虑使用队列,让监听应用去对日志进行记录,数据库日志做业务分离;
    3.使用网关来访问应用,其目的是进行请求的限流,以防止突然流量请求导致项目崩溃,同时还可以在请求达到峰值的时间来进行记录;

  • 相关阅读:
    nifi从入门到实战(保姆级教程)——身份认证
    盘点中国光博会CIOE2023上的国货
    Doris实战——美联物业数仓
    托管与非托管数据转换方法之C#设计笔记(十三)
    GBASE 8s 高可用RSS集群搭建
    设计模式之迭代器模式(十三)
    FPGA设计-HDMI1接口设计开发
    Linux: linux常见操作指令
    ElasticSearch 学习8 :ik分词器的扩展,及java调用ik分词器的analyzer
    图神经网络学习笔记
  • 原文地址:https://blog.csdn.net/a1773570500/article/details/126383398