原创:https://blog.csdn.net/ndzjx/article/details/122180553
mariadb 发现的一些错误总结
目录
1. Cannot assign requested address
2. accept4: too many files open
1. Cannot assign requested address
并发量大的时候,端口没有重用,被占满了,解决办法,两步:
一:临时生效
1)sysctl -w net.ipv4.tcp_tw_reuse=1
sysctl -w net.ipv4.tcp_tw_recycle=1
2)ulimit -n 65535
二:永久生效
1)
vi /etc/sysctl.conf 添加如下两行
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
立即生效:
sysctl -p
2)编辑:vim /etc/security/limits.conf 增加如下两行,注销重新登录会永久生效。
* soft nofile 65535
* hard nofile 65535
直接执行 ulimit -n 65535
2. accept4: too many files open
1. cat /proc/sys/fs/file-nr 查看系统全局内核限制的总共可用的和已用的文件描述符数量
2. ulimit -n 以及 cat /etc/security/limits.conf 查看用户态的打开文件数上限
3. cat /proc/<PID>/limits 查看针对单一进程的限制
4. 若内核限制、用户态限制已调大,但进程限制仍然不变,在 Systemd service 启动文件中通过 LimitNOFILE= 选项修改
5. 如果以上调整完毕,仍然出显 accept4 too many files open 错误,排查代码逻辑,是否存在未及时关闭的 tcp 连接
3. mariadb关闭bin-log失效
网上一般的方法是,注释小my.cnf 的log-bin这一行,但是在 mariadb中失效了。
正确的方法是,注掉那一行之后,加上一行:skip-log-bin
4. 一些性能优化的配置:
max_connections = 65000
max_connect_errors = 100
default_storage_engine = InnoDB
innodb_file_per_table = 1
innodb_data_home_dir = /var/lib/mysql
innodb_data_file_path = ibdata1:1G:autoextend
innodb_log_group_home_dir = /var/lib/mysql
innodb_buffer_pool_size = 2048M
innodb_log_file_size = 2048M
innodb_log_buffer_size = 1024M
innodb_flush_log_at_trx_commit = 2
innodb_lock_wait_timeout = 50
innodb_undo_logs = 128
innodb_undo_directory = /var/lib/mysql/undologs
innodb_undo_tablespaces = 4
innodb_undo_log_truncate = 1
innodb_max_undo_log_size = 4G
innodb_purge_threads = 4
innodb_purge_rseg_truncate_frequency = 32