# 项目核查

# 说明:该文档目的是项目上线、运行时进行的系统配置与排查。

# 一、-jar 参数详解

  • Xmx:指定Java堆的最大内存大小,服务器内存64G的情况下,最小设置4G,最大可设置到10G或以上。例如,-Xmx512m表示将最大堆内存设置为512MB。通过调整堆内存大小,可以优化应用程序的性能和内存使用情况。

  • Xms:指定Java堆的初始内存大小,服务器内存64G的情况下,最小设置4G,最大可设置到10G或以上。例如,-Xms256m表示将初始堆内存设置为256MB。这个参数可以帮助您在启动应用程序时控制初始内存分配的大小。

  • XX:MetaspaceSize:参数,您可以指定元空间的初始大小为256MB。这意味着在应用程序启动时,虚拟机会预分配256MB的内存用于存储类的元数据。

  • XX:MaxMetaspaceSize:指定元空间的最大大小。元空间用于存储类的元数据信息。例如,-XX:MaxMetaspaceSize=256m表示将元空间的最大大小设置为256MB。适当设置元空间的大小可以避免类加载和元数据溢出的问题。

  • XX:+UseConcMarkSweepGC:是一种JVM参数,它表示使用并发标记清除垃圾收集器(CMS)来进行内存管理。与传统的标记-清除(Mark-Sweep)垃圾收集器不同,CMS是一种有并发能力的垃圾收集器,它可以在应用程序运行的同时,对堆内存中的垃圾进行回收。

java -jar -Xms4096m -Xmx4096m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=256m -XX:+UseConcMarkSweepGC hrx-cecc.jar

# 二、线程使用

项目中所有的线程必须使用线程池,不允许单独创建线程和使用;

CECC项目中通用线程池类:ThreadPoolConfig,默认配置:

// 核心线程池大小
private int corePoolSize = 50;
// 最大可创建的线程数
private int maxPoolSize = 200;
// 队列最大长度
private int queueCapacity = 1000;
// 线程池维护线程所允许的空闲时间
private int keepAliveSeconds = 300;

# 注意:随着项目中线程的使用场景增多,线程的需求也会不断增加,如东磁项目核心线程池大小为:

// 核心线程池大小
private int corePoolSize = 500;
// 最大可创建的线程数
private int maxPoolSize = 3000;
// 队列最大长度
private int queueCapacity = 1000;
// 线程池维护线程所允许的空闲时间
private int keepAliveSeconds = 300;

# 三、数据库锁表

  • # 问题出现原因:

项目中某个表的数据太多而且无效,影响用户使用体验,计划用sql语句进行删除,然后手写sql进行删除数据操作,之后发现这个sql执行的时间比较长,然后进行停止操作。

之后就出现了关联表被锁的现象,导致程序执行update操作报错。

  • # 解决办法:

1、重启数据库(不推荐) 当时项目还在生产运行,出现这个问题也比较棘手,当时拿着报错去百度,没找到立即解决的办法。无奈只能尝试重启数据库的方式来解决问题。

2、通过查看数据库锁情况来kill进程来解决问题。这个是在问题解决后,尝试再找到另一种方式来合理的解决问题。首先用sql查询一下数据库情况,SHOW PROCESSLIST。

1.png

如果State列内容中有lock状态,那么通过Info列就可以得出哪张表被锁了,如果有被锁的表,那么在命令行输入(kill 后面的id是上图的第一列值)Kill 进程id,如果出现了多个被锁的表就一个一个进行kill。

# 四、MySQL数据库bin-log日志是否关闭

MySQL8 及以上版本默认开启bin-log日志,如果不关闭则每天生成bin-log日志,且日志大小按照CECC项目运行情况,一天的数据文件在1G左右;

项目长时间运行会造成磁盘写满的情况,需要特别注意,在其他项目中已经出现过此情况,造成程序无法正常运行;

# 关闭方法,在MySQL配置文件 my.ini 或 my.cnf 中添加:

[mysqld]
log_bin = OFF 
或
skip-log-bin

# 五、MySQL数据库缓冲池调整

# mysql默认缓冲池是128M;

# 查询mysql缓冲池大小sql: 
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';

# 查询mysql缓冲池使用情况:
SHOW STATUS LIKE 'Innodb_buffer_pool_pages%';

# 将mysql的缓冲池值设置大1G: 
SET GLOBAL innodb_buffer_pool_size = 1073741824;

# 说明:这样设置方法是立即生效,但是如果重启mysql会失效,永久生效需要改的mysql配置文件;

# 在mysql配置文件中,my.ini 或 my.cnf 的文件里面配置:innodb_buffer_pool_size = 1G,根据现场的内存情况来设置,最大不能超过物理内存的百分之80

# 六、防火墙

如使用Linux系统,千万记得关闭防火墙。

关闭防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service(永久)
 
查看防火墙状态
firewall-cmd --state