一、批量服务执行时报bean初始化失败的问题
具体情况:
在批量控制台执行作业时,一直报调用某个common层的服务失败,查看日志发现意思是没有定义该类。这个情况本地执行时没有遇到,部署上服务器才发现。
查问题流程:
1.检查zookeeper地址是否正确,考虑是连错了zookeeper中心。检查后发现没有错。
2.考虑到报错的含义为没有定义该类,应该是该项目缺少调用声明,检查dubbo配置文件中的consumer的定义,检查后发现也是定义了。
3.仍然觉得应该是没有配置好consumer。考虑到可能是读取配置文件失败,虽然该文件存在,但实际启动时没有读取进去。检查pom文件。pom文件内声明的编译阶段没有问题,因为已经部署上服务器,应该也不是这部分出的错。考虑是否为打包过程有问题。
4.检查pom中的打成jar包部分。由于配置文件均是使用统一替换、部署的方法,在打成jar包的时候,并没有将这些xml配置文件打包进去,这也是符合初衷的。
5.考虑到该问题发生在启动阶段(假设真的是配置文件未加载进去),查看启动脚本和启动入口程序。入口程序内配置文件使用得是classpath的相对路径,启动脚本中直接将jar包路径、配置文件路径加入该classpath。
6.回忆到pom中写的打包过程,虽然把xml文件除去,但却保留了这个文件夹,而文件夹的路径正好是jar包内,且classpath的定义中,jar包路径定义在了配置文件路径之前。
7.找到问题,程序启动时读取的文件夹读取错了,读到了classpath中的jar包内的文件夹(正好是dubbo配置文件文件夹还保留在里面,其他的配置文件文件夹没有放在里面,所以启动没有报错,没有涉及到RPC调用的方法也都正常工作)
8.修改pom,打包时将应该读取的配置文件的文件夹统统在打包时除去。重新打包部署一遍,测试执行,执行正常。
二、服务启动时内存溢出
脑壳痛,这个问题出现的情况发生在一台内存为16G的服务器上的,同时启动9个服务,会报内存溢出,无法创建新线程的问题。仅在启动时出现,启动后使用ps命令查看服务所在进程占用内存、free命令查看总内存使用情况都正常。
1.猜测是服务启动时新建线程数量过多,超过系统定义的最大线程数,但使用pstree命令查看发现几乎每个服务进程也只打开了40个左右的线程,总线程数应该远低于62335。应该不是这个原因。
2.因为服务设定的jvm大小是正常的,锅应该不在服务本身的内存占用(9个服务,每个min512,max1024),所以猜测是服务启动时需要加载的大文件过多,导致系统使用了过多的cache空间,同时启动的话释放速度没跟上,用free命令查看后只能看出cache确实占用了很大的内存空间,但是否是这个原因不确定,而且也不知道该如何去改。
3.在这种情况下没有办法只好先改启动策略了。让服务不要同时启动,几个几个服务先后启动。
三、配置中心初始化出错、日志输出中心初始化出错
哇……居然已经忘了这个怎么回事了……明明才过去没有多少天……真的不能太晚想总结啊,全都忘光了
四、程序问题
大部分是些逻辑问题、粗心写错了变量名称这样的问题……写程序时一定要仔细一些