DM数据库学习之路(十九)DM8数据库sysbench部署及压力测试

sysbench部署

  ### **安装依赖**
复制代码
yum -y install  make automake libtool pkgconfig libaio-devel vim-common

    上传sysbench源代码

sysbench_tool.tar

    测试是否安装成功

$ /opt/sysbench/sysbench-master-dpi/src/lua

$ ./sysbench --version

sysbench 1.1.0

sysbench测试DM

  ### **测试准备**

  1.

     #### **生成配置文件**

$cd /dmdata/sysbench_tool/sysbench-master-dpi

$ ./autogen.sh

autoreconf: Entering directory `.'

autoreconf: configure.ac: not using Gettext

autoreconf: running: aclocal -I m4

autoreconf: configure.ac: tracing

autoreconf: running: libtoolize --copy

libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, 'config'.

libtoolize: copying file 'config/ltmain.sh'

libtoolize: putting macros in AC_CONFIG_MACRO_DIRS, 'm4'.

libtoolize: copying file 'm4/libtool.m4'

libtoolize: copying file 'm4/ltoptions.m4'

libtoolize: copying file 'm4/ltversion.m4'

autoreconf: running: /usr/bin/autoconf

autoreconf: running: /usr/bin/autoheader

autoreconf: running: automake --add-missing --copy --no-force

autoreconf: Leaving directory `.'

[dmdba@dm8db01 sysbench-master-dpi]$ pwd

/dmdata/sysbench_tool/sysbench-master-dpi

此步骤会生成配置文件configure

      执行配置文件

X86平台,仅测试DM命令如下:

$cd /dmdata/sysbench_tool/sysbench-master-dpi

$ ./configure --without-mysql --with-dm

checking build system type... x86_64-unknown-linux-gnu

checking host system type... x86_64-unknown-linux-gnu

checking target system type... x86_64-unknown-linux-gnu

checking for a BSD-compatible install... /usr/bin/install -c

checking whether build environment is sane... yes

/dmdata/sysbench_tool/sysbench-master-dpi/config/missing: Unknown `--is-lightweight' option

Try `/dmdata/sysbench_tool/sysbench-master-dpi/config/missing --help' for more information

configure: WARNING: 'missing' script is too old or missing

checking for a thread-safe mkdir -p... /usr/bin/mkdir -p

checking for gawk... gawk

checking whether make sets $(MAKE)... yes

checking whether make supports nested variables... yes

checking whether make supports the include directive... yes (GNU style)

checking for gcc... gcc

checking whether the C compiler works... yes

checking for C compiler default output file name... a.out

checking for suffix of executables...

checking whether we are cross compiling... no

checking for suffix of object files... o

checking whether we are using the GNU C compiler... yes

checking whether gcc accepts -g... yes

checking for gcc option to accept ISO C89... none needed

checking whether gcc understands -c and -o together... yes

checking dependency style of gcc... gcc3

checking how to run the C preprocessor... gcc -E

checking for grep that handles long lines and -e... /usr/bin/grep

checking for egrep... /usr/bin/grep -E

checking for ANSI C header files... yes

checking for sys/types.h... yes

checking for sys/stat.h... yes

checking for stdlib.h... yes

checking for string.h... yes

checking for memory.h... yes

checking for strings.h... yes

checking for inttypes.h... yes

checking for stdint.h... yes

checking for unistd.h... yes

checking minix/config.h usability... no

checking minix/config.h presence... no

checking for minix/config.h... no

checking whether it is safe to define EXTENSIONS... yes

checking for gcc... (cached) gcc

checking whether we are using the GNU C compiler... (cached) yes

checking whether gcc accepts -g... (cached) yes

checking for gcc option to accept ISO C89... (cached) none needed

checking whether gcc understands -c and -o together... (cached) yes

checking dependency style of gcc... (cached) gcc3

checking for gcc option to accept ISO C99... none needed

checking how to run the C preprocessor... gcc -E

checking for a sed that does not truncate output... /usr/bin/sed

checking for C compiler vendor... gnu

checking for gcc architecture flag...

checking for x86 cpuid 0 output... 16:756e6547:6c65746e:49656e69

checking for x86 cpuid 1 output... 906ea:1020800:fffa3203:1f8bfbff

checking whether C compiler accepts -march=core2... yes

checking for gcc architecture flag... -march=core2

checking for ar... ar

checking the archiver (ar) interface... ar

checking how to print strings... printf

checking for a sed that does not truncate output... (cached) /usr/bin/sed

checking for fgrep... /usr/bin/grep -F

checking for ld used by gcc... /usr/bin/ld

checking if the linker (/usr/bin/ld) is GNU ld... yes

checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B

checking the name lister (/usr/bin/nm -B) interface... BSD nm

checking whether ln -s works... yes

checking the maximum length of command line arguments... 3145728

checking how to convert x86_64-unknown-linux-gnu file names to x86_64-unknown-linux-gnu format... func_convert_file_noop

checking how to convert x86_64-unknown-linux-gnu file names to toolchain format... func_convert_file_noop

checking for /usr/bin/ld option to reload object files... -r

checking for objdump... objdump

checking how to recognize dependent libraries... pass_all

checking for dlltool... no

checking how to associate runtime and link libraries... printf %s\n

checking for archiver @FILE support... @

checking for strip... strip

checking for ranlib... ranlib

checking command to parse /usr/bin/nm -B output from gcc object... ok

checking for sysroot... no

checking for a working dd... /usr/bin/dd

checking how to truncate binary pipes... /usr/bin/dd bs=4096 count=1

checking for mt... no

checking if : is a manifest tool... no

checking for dlfcn.h... yes

checking for objdir... .libs

checking if gcc supports -fno-rtti -fno-exceptions... no

checking for gcc option to produce PIC... -fPIC -DPIC

checking if gcc PIC flag -fPIC -DPIC works... yes

checking if gcc static flag -static works... yes

checking if gcc supports -c -o file.o... yes

checking if gcc supports -c -o file.o... (cached) yes

checking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes

checking whether -lc should be explicitly linked in... no

checking dynamic linker characteristics... GNU/Linux ld.so

checking how to hardcode library paths into programs... immediate

checking whether stripping libraries is possible... yes

checking if libtool supports shared libraries... yes

checking whether to build shared libraries... yes

checking whether to build static libraries... yes

checking for pkg-config... yes

checking for C compiler vendor... (cached) gnu

checking whether to compile with MySQL support... no

checking whether to compile with DM support... yes

checking whether to compile with PostgreSQL support... no

checking for pkg-config... /usr/bin/pkg-config

checking pkg-config is at least version 0.9.0... yes

checking whether to build with system or bundled LuaJIT... bundled

checking whether to build with system or bundled Concurrency Kit... bundled

checking whether SHM_HUGETLB is declared... yes

checking whether O_SYNC is declared... yes

checking for the pthreads library -lpthreads... no

checking whether pthreads work without any flags... no

checking whether pthreads work with -Kthread... no

checking whether pthreads work with -kthread... no

checking for the pthreads library -llthread... no

checking whether pthreads work with -pthread... yes

checking for joinable pthread attribute... PTHREAD_CREATE_JOINABLE

checking if more special flags are required for pthreads... no

checking for sqrt in -lm... yes

checking DM C flags... ./configure: line 12735: /dm8: Is a directory

checking DM linker flags... /dm8/include/libdmdpi.a -lrt

checking if dm.h defines DM_OPT_SSL_MODE... checking libaio.h usability... yes

checking libaio.h presence... yes

checking for libaio.h... yes

checking for io_queue_init in -laio... yes

checking if io_getevents() has an old interface... no

checking for ANSI C header files... (cached) yes

checking errno.h usability... yes

checking errno.h presence... yes

checking for errno.h... yes

checking fcntl.h usability... yes

checking fcntl.h presence... yes

checking for fcntl.h... yes

checking math.h usability... yes

checking math.h presence... yes

checking for math.h... yes

checking pthread.h usability... yes

checking pthread.h presence... yes

checking for pthread.h... yes

checking sched.h usability... yes

checking sched.h presence... yes

checking for sched.h... yes

checking signal.h usability... yes

checking signal.h presence... yes

checking for signal.h... yes

checking for stdlib.h... (cached) yes

checking for string.h... (cached) yes

checking sys/aio.h usability... no

checking sys/aio.h presence... no

checking for sys/aio.h... no

checking sys/ipc.h usability... yes

checking sys/ipc.h presence... yes

checking for sys/ipc.h... yes

checking sys/time.h usability... yes

checking sys/time.h presence... yes

checking for sys/time.h... yes

checking sys/mman.h usability... yes

checking sys/mman.h presence... yes

checking for sys/mman.h... yes

checking sys/shm.h usability... yes

checking sys/shm.h presence... yes

checking for sys/shm.h... yes

checking thread.h usability... no

checking thread.h presence... no

checking for thread.h... no

checking for unistd.h... (cached) yes

checking limits.h usability... yes

checking limits.h presence... yes

checking for limits.h... yes

checking libgen.h usability... yes

checking libgen.h presence... yes

checking for libgen.h... yes

checking for off_t... yes

checking whether time.h and sys/time.h may both be included... yes

checking for thread local storage (TLS) class... _Thread_local

checking for attribute((format))... yes

checking for attribute((unused))... yes

checking for special C compiler options needed for large files... no

checking for _FILE_OFFSET_BITS value needed for large files... no

checking size of size_t... 8

checking size of bool... 1

checking for stdlib.h... (cached) yes

checking for unistd.h... (cached) yes

checking for sys/param.h... yes

checking for getpagesize... yes

checking for working mmap... yes

checking whether strerror_r is declared... yes

checking for strerror_r... yes

checking whether strerror_r returns char *... yes

checking for library containing clock_gettime... none required

checking for alarm... yes

checking for clock_gettime... yes

checking for directio... no

checking for fdatasync... yes

checking for gettimeofday... yes

checking for isatty... yes

checking for memalign... yes

checking for memset... yes

checking for posix_memalign... yes

checking for pthread_cancel... yes

checking for pthread_yield... yes

checking for setvbuf... yes

checking for sqrt... yes

checking for strdup... yes

checking for thr_setconcurrency... no

checking for valloc... yes

checking for pthread_once... yes

checking that generated files are newer than configure... done

configure: creating ./config.status

config.status: creating Makefile

config.status: creating third_party/luajit/Makefile

config.status: creating third_party/concurrency_kit/Makefile

config.status: creating src/Makefile

config.status: creating src/drivers/Makefile

config.status: creating src/drivers/mysql/Makefile

config.status: creating src/drivers/pgsql/Makefile

config.status: creating src/drivers/dm/Makefile

config.status: creating src/tests/Makefile

config.status: creating src/tests/cpu/Makefile

config.status: creating src/tests/fileio/Makefile

config.status: creating src/tests/memory/Makefile

config.status: creating src/tests/threads/Makefile

config.status: creating src/tests/mutex/Makefile

config.status: creating src/lua/Makefile

config.status: creating src/lua/internal/Makefile

config.status: creating tests/Makefile

config.status: creating tests/include/config.sh

config.status: creating snap/snapcraft.yaml

config.status: creating config/config.h

config.status: executing depfiles commands

config.status: executing libtool commands

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

sysbench version : 1.1.0

CC : gcc

CFLAGS : -O3 -funroll-loops -Wall -Wextra -Wpointer-arith -Wbad-function-cast -Wstrict-prototypes -Wnested-externs -Wno-format-zero-length -Wundef -Wstrict-prototypes -Wmissing-prototypes -Wmissing-declarations -Wredundant-decls -Wcast-align -Wvla -pthread

CPPFLAGS : -D_GNU_SOURCE -I(top_srcdir)/src -I(abs_top_builddir)/third_party/luajit/inc -I$(abs_top_builddir)/third_party/concurrency_kit/include

LDFLAGS : -L/usr/local/lib

LIBS : -laio -lm

prefix : /usr/local

bindir : ${prefix}/bin

libexecdir : ${prefix}/libexec

mandir : ${prefix}/share/man

datadir : ${prefix}/share

MySQL support : no

DM support : yes

PostgreSQL support : no

LuaJIT : bundled

LUAJIT_CFLAGS : -I$(abs_top_builddir)/third_party/luajit/inc

LUAJIT_LIBS : $(abs_top_builddir)/third_party/luajit/lib/libluajit-5.1.a -ldl

LUAJIT_LDFLAGS : -rdynamic

Concurrency Kit : bundled

CK_CFLAGS : -I$(abs_top_builddir)/third_party/concurrency_kit/include

CK_LIBS : $(abs_top_builddir)/third_party/concurrency_kit/lib/libck.a

configure flags :

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

      编译

$ cd /dmdata/sysbench_tool/sysbench-master-dpi

$ make

编译成功后,在src目录下生成可执行文件sysbench

将sysbench拷贝到src/lua目录下,然后进入/src/lua目录运行sysbench

      环境变量设置

export DM_HOME=/dm8

export PATH=DM_HOME/bin:PATH:DM_HOME/tool:PATH:HOME/bin:/usr/local/bin

export LD_LIBRARY_PATH=LD_LIBRARY_PATH:DM_HOME/bin

sysbench测试的时候需要依赖dm的dpi驱动

需要设置:LD_LIBRARY_PATH

      DM默认测试脚本说明

sysbench的数据库测试脚本在src/lua目录下,以oltp为前缀,脚本是lua脚本,可以自行编辑,编辑保存后不需要编译就可以直接使用。

Internal目录下的lua脚本为基础生成h文件,供后续程序编译使用。修改Internal目录下的lua脚本需要重新编译sysbench脚本。

Oltp_common.lua:最基础的测试脚本,定义了表结构、事务基本操作。其它oltp脚本都是引用oltp_common,将其中query进行组合,实现各种测试场景。最常用3个脚本如下:

oltp_read_write.lua:读写混合性测试,包含查询,更新,删除,插入操作

oltp_read_only.lua:读性能测试,包含查询操作

oltp_write_only.lua:写性能测试,包含更新、删除、插入操作

一般使用oltp_read_write.lua脚本测试数据库的oltp性能,包含了读和写操作。oltp_read_write.lua脚本qps是tps的20倍,一个transaction包含20个query操作,这20个query包含14个read,4个write,2个other.

  • begin:事务开始,计为1个other
  • point_selects:循环10次,计为10个read
  • simple_ranges:计为1个read
  • sum_ranges:计为1个read
  • order_ranges:计为1个read
  • distinct_ranger:计为1个read
  • index_updates: 计为1个write
  • non_index_updates: 计为1个write
  • delete_inserts:包含delete,insert操作,计为2个write
  • commit:事务结束,计为1个other

oltp_read_write.lua脚本说明:

require **部分:**引用其它lua脚本。Oltp_read_write.lua脚本中的函数定义都在oltp_common.lua脚本,所以需要首先引用。

Prepare_statements **部分:**对应sysbench测试执行过程中run命令的initializing worker threads部分,对数据库的操作就是建立session后准备各种操作的语句句柄和参数绑定。

Event **部分:**这部分是测试执行的具体步骤,对应与sysbench的测试执行过程中run命令在threads started后开始的操作。反复执行event统计各种指标。

    DM8测试

      #### **基本测试**
    
      1.
    
         ##### **数据准备**
    

创建测试表,并插入测试数据

./sysbench oltp_read_write.lua --db-driver=dm --dm-db=localhost:5236 --dm-user=SYSDBA --dm-password=SYSDBA --table_size=250000 --tables=25 --auto-inc=0 --threads=256 --time=180 --report-interval=30 prepare

说明:

oltp_read_write.lua #lua脚本

--db-driver=dm #使用DM的驱动

--dm-db=localhost:5236 #DM实例监听端口

--dm-user=SYSDBA #DM实例用户名

--dm-password=SYSDBA #DM实例密码

--table_size=250000 #每张表插入25万行条数据

--tables=25 #建25张测试表

--auto-inc=0 #表示主键是否使用自增列。0表示不使用自增列

--threads=256 #表示发起256个并发

--time=180 #表示测试总时长180秒

--report-interval=30 #表示每30秒输出一次测试进度报告

        运行测试

执行测试脚本

./sysbench oltp_read_write.lua --db-driver=dm --dm-db=localhost:5236 --dm-user=SYSDBA --dm-password=SYSDBA --table_size=250000 --tables=25 --auto-inc=0 --threads=256 --time=180 --report-interval=30 run

        清理数据

删除测试表

./sysbench oltp_read_write.lua --db-driver=dm --dm-db=localhost:5236 --dm-user=SYSDBA --dm-password=SYSDBA --table_size=250000 --tables=25 --auto-inc=0 --threads=256 --time=180 --report-interval=30 cleanup

结论:测试环境为笔记本虚拟机,CPU2核,519TPS,10387QPS

可以根据CPU核数先估算TPS,查看机器CPU核数

cat /proc/cpuinfo | grep "processor" | wc -l

2

物理机每核300-350TPS

虚拟机每核200-250TPS

        参数优化
  1. I/O 优化

DIRECT_IO = 1 #磁盘性能高,内存不足,IO密集

IO_THR_GROUPS = 128 #磁盘性能高,增加IO线程数目

检查点,减少检查点频率,减少每次刷盘数据量

CKPT_RLOG_SIZE = 0

CKPT_DIRTY_PAGES = 0

CKPT_FLUSH_RATE = 1

CKPT_INTERVAL = 300

减少UNDO_RETENTION

UNDO_RETENTION = 2

  1. 其它参数优化

ALTER SYSTEM SET 'BUFFER' =200000 SPFILE;

ALTER SYSTEM SET 'BUFFER_POOLS' =97 SPFILE;

ALTER SYSTEM SET 'FAST_POOL_PAGES' =200000 SPFILE;

ALTER SYSTEM SET 'FAST_ROLL_PAGES' =10000 SPFILE;

ALTER SYSTEM SET 'ENABLE_FREQROOTS' =2 SPFILE;

ALTER SYSTEM SET 'TRX_DICT_LOCK_NUM' =1024 SPFILE;

ALTER SYSTEM SET 'MEMORY_MAGIC_CHECK' =0 SPFILE;

ALTER SYSTEM SET 'ENABLE_MONITOR' =0 SPFILE;

ALTER SYSTEM SET 'MONITOR_TIME' =0 SPFILE;

ALTER SYSTEM SET 'PK_WITH_CLUSTER' =1 SPFILE;

ALTER SYSTEM SET 'FAST_LOGIN' =1 SPFILE;

ALTER SYSTEM SET 'BATCH_PARAM_OPT =1 SPFILE;

ALTER SYSTEM SET 'ENABLE_INDEX_FILTER' =1 SPFILE;

ALTER SYSTEM SET 'NEW_MOTION' =1 SPFILE;

ALTER SYSTEM SET 'MULTI_UPD_OPT_FLAG' =1 SPFILE;

ALTER SYSTEM SET 'DSC_TRX_CMT_LSN_SYNC' =0 SPFILE;

ALTER SYSTEM SET 'CLT_CONST_TO_PARAM' =1 SPFILE;

--I0

ALTER SYSTEM SET 'DIRECT_IO' =1 SPFILE;

ALTER SYSTEM SET 'IO_THR_GROUPS' =128 SPFILE;

--THREADS

ALTER SYSTEM SET 'WORKER_TIIREADS' =64 SPFILE;

--WORK THRD STACK SIZE default value is 8192

ALTER SYSTEM SET 'WORK_THRD_STACK_SIZE' =8192 SPFILE;

--SESSION

ALTER SYSTEM SET 'MAX_SESSIONS' = 10000 SPFILE;

ALTER SYSTEM SET 'MAX_SESSION_STATEMENT' =20000 SPFILE;

--TRANSACTION

ALTER SYSTEM SET 'UNDO_RETENTION' =2 SPFILE;

--RLOG

ALTER SYSTEM SET 'RLOG_BUF_SIZE' =512 SPFILE;

ALTER SYSTEM SET 'RLOG_POOL_SIZE' =256 SPFILE;

ALTER SYSTEM SET 'RLOG_PARALLEL_ENABLE' =1 SPFILE;

ALTER SYSTEM SET 'RLOG_SAFE_SPACE' =128 SPFILE;

--ALTER SYSTEM SET 'RLOG_CHECK_SPACE' =1 SPFILE;

--CHECK POINT

ALTER SYSTEM SET 'CKPT_RLOG_SIZE' =0 SPFILE;

ALTER SYSTEM SET 'CKPT_DIRTY_PAGES' =0 SPFILE;

ALTER SYSTEM SET 'CKPT_FLUSII_RATE' =1 SPFILE;

ALTER SYSTEM SET 'CKPT_INTERVAL' =300 SPFILE;

ALTER SYSTEM SET 'ENABLE_SPACELIMIT_CHECK' =1 SPFILE;

--INDEX

ALTER SYSTEM SET 'SORT_BUF_SIZE' =3 SPFILE;

ALTER SYSTEM SET 'SORT_BLK_SIZE' =1 SPFILE;

ALTER SYSTEM SET 'SORT_BUF_GLOBAL_SIZE' =100000 SPFILE;

ALTER SYSTEM SET 'SORT_FLAG' =1 SPFILE;

      脚本测试

vi 88.sh

#!/bin/bash

workdir=$(cd `dirname $0`; pwd)

echo 'sysbench oltp_read_write'

./sysbench --db-driver=dm --dm-db=localhost:5236 --dm-user=SYSDBA --dm-password=SYSDBA --table_size=250000 --tables=25 --events=0 --time=600 --auto_inc=1 --threads=256 oltp_read_write prepare > ${workdir}/oltp_read_write_createtable.log 2>&1

./sysbench --db-driver=dm --dm-db=localhost:5236 --dm-user=SYSDBA --dm-password=SYSDBA --table_size=250000 --tables=25 --events=0 --time=600 --auto_inc=1 --threads=256 --percentile=95 --report-interval=1 oltp_read_write run > ${workdir}/oltp_read_write.log 2>&1

sleep 30

./sysbench --db-driver=dm --dm-db=localhost:5236 --dm-user=SYSDBA --dm-password=SYSDBA --table_size=250000 --tables=25 --events=0 --time=600 --auto_inc=1 --threads=256 --percentile=95 oltp_read_write cleanup > ${workdir}/oltp_read_write_cleanup.log 2>&1

测试结果:

    常见问题

      #### **连接失败,错误代码DM_-70089**
    

错误信息:

ALERT:Error -- DM_-70089_Encryption module failed to load

错误 原因:

Sysbench测试DM时,未找到所依赖的dm动态库

解决方法:

在sysbench终端,设置LD_LIBRARY_PATH,添加dm的bin目录,或者将dm的bin目录下的动态库拷贝到系统目录。

      连接成功,测试线程初始化失败,错误代码DM_-606

错误信息:

DM_-606_stmt handle to the limit the number of statements or system of memory

错误 原因:

Session上的句柄限制,需要调大句柄。例:1个事务仅有2个query,测试表共计25个,每个session要申请2*25=50个句柄用于测试。默认的oltp_read_write.lua脚本中1个事务有11个query,25张测试表默认即11*25=275个语句句柄。

解决方法:

vi dm.ini 增加MAX_SESSION_STATEMENT

      执行configure失败

错误信息:

configure error:mysql_config executable not found

错误 原因:

编译支持mysql的sysbench时,没有找到mysql的头文件和驱动。

解决方法:

如果不需要支持mysql测试,那么configure使用参数---without-mysql.

如果需要支持mysql测试,那么需要安装mysql-devel软件包,configure使用参数---with-mysql-includes指定mysql头文件目录,--with-mysql-libs指定libmysqlclient.so文件目录。例如

./configure --with-mysql-includes=/usr/include/mysql --with-mysql-libs=/usr/lib64/mysql/

      测试DM,连接成功,测试线程初始化失败

错误信息:

无效的表或者视图名

错误 原因:

没有完成建表和数据插入或者sysbench run使用的参数---tables同prepare过程中使用的---tables参数不一致

解决方法:

先完成建表和数据插入,确认sysbench run使用的参数---tables同prepare过程中使用的---tables参数一致。

      测试DM,连接失败

错误信息:

当前session超过最大值

错误 原因:

当前测试数据库连接threads=1000超过dm.ini中MAX_SESSIONS最大值

解决方法:

修改数据库dm.ini中MAX_SESSION值

      测试DM,测试线程初始化失败

错误信息:

FATAL:worker threads failed to initialize within 30 seconds

错误 原因:

Sysbench测试中,测试线程初始化的默认时间超过了初始化参数时间值,如--time=30,当遇到网路延时,测试表多,测试线路程较多,一旦超过30秒,就会出现上述错误。

解决方法:

--thread-init-timeout来设置一个合适

的初始化超时时间。

      测试DM,并发大测试表多,初始化失败

错误信息:

Error -- DM_-70019

错误 原因:

Dmserver同时处理太多连接请求,导致每个连接处理耗时增加,后续连接超时。

解决方法:

vi dm.ini增加参数STARTUP_TIMEOUT=500

注:STARTUP_TIMEOUT表示dpi_login发startup和login消息给服务器之间的超时时间。

相关推荐
虾球xz28 分钟前
游戏引擎学习第55天
学习·游戏引擎
m0_7482448338 分钟前
StarRocks 排查单副本表
大数据·数据库·python
oneouto44 分钟前
selenium学习笔记(二)
笔记·学习·selenium
C++忠实粉丝1 小时前
Redis 介绍和安装
数据库·redis·缓存
sealaugh321 小时前
aws(学习笔记第十九课) 使用ECS和Fargate进行容器开发
笔记·学习·aws
wmd131643067121 小时前
将微信配置信息存到数据库并进行调用
数据库·微信
炭烤玛卡巴卡1 小时前
学习postman工具使用
学习·测试工具·postman
是阿建吖!1 小时前
【Linux】基础IO(磁盘文件)
linux·服务器·数据库
凡人的AI工具箱1 小时前
每天40分玩转Django:Django国际化
数据库·人工智能·后端·python·django·sqlite
ClouGence1 小时前
Redis 到 Redis 数据迁移同步
数据库·redis·缓存