进公司后,马上开始体会到成熟公司的氛围,进去第一天除了领到了早就准备好的新笔记本电脑,然后就是各种入职培训,之后一个月内也参加了不少专门的业务知识培训,虽然那个时候由于刚开始接触金融业务,对于很多培训都还有些茫茫然,理解的不多,但是确实很感慨,毕竟楼主在之前8年左右工作经历中,就几乎从没有接受过任何的培训。
除了各种培训之外,主要工作就是学习公司的一个新产品的源码,杨总专门和我谈了一次,让我自己定了个学习计划,准备花接近3个月的时间,把这个产品的代码系统的学习一遍。
结果才1个多月,学习计划就被意外的打断了。公司当时在外地有一个新项目,刚刚上线,但是上线后问题比较多,于是我所在项目组的同事逐渐都被派过去了。当时在听到这个事情的时候,说实话我对公司的安排是有些疑问的,既然是新项目,为什么不在一开始就多派些人过去,结果现在搞成了添油战术。到最后项目组无人可派,连我这个刚入职的新人也不得不被派了过去。
到了之后,发现项目组的情况确实很糟糕,一方面系统刚上线,问题不少,几乎每天都有新的问题产生,另一方面,由于之前开发周期紧,一部分功能没有如期投产,客户要求一个月之内必须把这些剩下的功能都投产,所以导致10来个同事一方面不停的解决生产问题,另一方面还要开发新功能,配合测试,工作强度非常大,已经到了每天顶多只能睡2-3个小时的地步。
我由于是新人,对业务不熟悉,所以安排了两个纯技术的生产问题给我。一个是关于该系统无法部署新规则的问题,一个是系统日志无故丢失的问题。这两个问题从系统一上线就发生了,截止目前已经2周多,但是完全没有任何进展。尤其是第二个问题,系统每次启动之后没多久,日志就完全没有了,导致其他的生产问题也无从查起。这里说一下,公司的这个产品,也是完全采用的各种JAVA开源框架来实现的。
所以我优先解决第二个问题,由于系统采用的log4j的开源日志框架,所以先读了一下系统里面集成log4j的相关代码,没发现什么问题,然后因为系统对log4j做了些封装,也就是自己实现了部分日志功能,我担心会不会有压力问题,于是自己写了些代码做了下压力测试,发现没有问题。于是首先就排除了代码问题、性能问题这两点,最后我根据经验,开始怀疑是不是因为系统集成的某些开源的框架的日志功能和系统的日志功能出现了冲突,然后就对整个系统的代码以log4j为关键字进行了全文检索,结果真的发现了问题,原来系统集成的某个功能模块,也试用了log4j的日志,而且有自己的配置文件,原本已经被禁用了,但是后来不知道被谁给打开了。于是只要有人使用了这个功能,就会尝试再初始化一次log4j的日志引擎,就会导致系统原本的日志全部都没了。
我来了之后只花了不到2天就解决了之前困扰了大家很久的故障,而且这个故障解决之后,日志可以正常输出了,大家排查其他生产故障的效率也提高了很多,我也再接再厉,开始解决分配给我的第二个故障,即不能部署新规则的问题。
规则其实是个我之前完全没有接触过的比较高端的技术,一般只在企业级的应用中才会使用,所以我一方面囫囵吞枣地了解了一下公司使用的开源规则引擎的基本情况,然后开始结合日志排查问题。结果我在与操作时间接近的日志里面看到了一些非常熟悉的内容,因为这个时候系统是部署在Windows服务器上,而这些同样的内容我以前曾经在原公司所使用的Linux服务器的系统上看到过,即类似“文件句柄数达到了最大限制”。这个时候我非常惊讶,因为我之前在Linux上碰到的问题是由于Linux服务器有默认的限制,一个应用程序打开的文件句柄数不能超过1024或者2048个,但这是个系统级的参数,可以自己修改,所以把这个参数修改到更高就解决问题了。但是windows上会有类似的问题吗?后来通过网上查询了解到,原来是客户采用的中间件服务器自带的JDK版本存在问题,调用了Windows的一个比较底层的函数,而该函数有打开文件句柄数的限制。经过试验,只要升级JDK版本就可以解决问题,但是这时候出现了另外一个问题,即客户不同意随意升级JDK,因为客户作为一个大型的外资金融企业,对于各种软硬件的版本,都有着严格的要求和规范,只有经过正规的测试后的版本才能够允许部署,现在不能因为我发现的问题就随便升级。
这个时候比较纠结,如果要解决问题就得升级JDK版本,但是客户又要求必须经过全面测试之后才能升级,而这时候我们显然没有时间针对JDK安排全面的测试。最后我灵机一动,既然此问题是由于在部署规则的时候,系统打开了过多的文件句柄l,而且这时候我们部署的最终系统是以war包方式部署,在war包里面最终的部署程序是以单独的class文件方式存在,并没有打包成jar文件,如果我们先打包成jar文件,那对系统来说就是一个jar文件,而不是成千上万个class文件,这时候再部署,会不会有效呢?结果测试之后发现居然真的有效,这样我们既不需要升级JDK,也不需要做别的大的改造,仅仅是改变一下最终发布的代码的方式,就解决了这个问题。
于是,一个星期之内,我一下子解决了两个很麻烦的技术问题,开始在项目组内有立足之本了。
除了各种培训之外,主要工作就是学习公司的一个新产品的源码,杨总专门和我谈了一次,让我自己定了个学习计划,准备花接近3个月的时间,把这个产品的代码系统的学习一遍。
结果才1个多月,学习计划就被意外的打断了。公司当时在外地有一个新项目,刚刚上线,但是上线后问题比较多,于是我所在项目组的同事逐渐都被派过去了。当时在听到这个事情的时候,说实话我对公司的安排是有些疑问的,既然是新项目,为什么不在一开始就多派些人过去,结果现在搞成了添油战术。到最后项目组无人可派,连我这个刚入职的新人也不得不被派了过去。
到了之后,发现项目组的情况确实很糟糕,一方面系统刚上线,问题不少,几乎每天都有新的问题产生,另一方面,由于之前开发周期紧,一部分功能没有如期投产,客户要求一个月之内必须把这些剩下的功能都投产,所以导致10来个同事一方面不停的解决生产问题,另一方面还要开发新功能,配合测试,工作强度非常大,已经到了每天顶多只能睡2-3个小时的地步。
我由于是新人,对业务不熟悉,所以安排了两个纯技术的生产问题给我。一个是关于该系统无法部署新规则的问题,一个是系统日志无故丢失的问题。这两个问题从系统一上线就发生了,截止目前已经2周多,但是完全没有任何进展。尤其是第二个问题,系统每次启动之后没多久,日志就完全没有了,导致其他的生产问题也无从查起。这里说一下,公司的这个产品,也是完全采用的各种JAVA开源框架来实现的。
所以我优先解决第二个问题,由于系统采用的log4j的开源日志框架,所以先读了一下系统里面集成log4j的相关代码,没发现什么问题,然后因为系统对log4j做了些封装,也就是自己实现了部分日志功能,我担心会不会有压力问题,于是自己写了些代码做了下压力测试,发现没有问题。于是首先就排除了代码问题、性能问题这两点,最后我根据经验,开始怀疑是不是因为系统集成的某些开源的框架的日志功能和系统的日志功能出现了冲突,然后就对整个系统的代码以log4j为关键字进行了全文检索,结果真的发现了问题,原来系统集成的某个功能模块,也试用了log4j的日志,而且有自己的配置文件,原本已经被禁用了,但是后来不知道被谁给打开了。于是只要有人使用了这个功能,就会尝试再初始化一次log4j的日志引擎,就会导致系统原本的日志全部都没了。
我来了之后只花了不到2天就解决了之前困扰了大家很久的故障,而且这个故障解决之后,日志可以正常输出了,大家排查其他生产故障的效率也提高了很多,我也再接再厉,开始解决分配给我的第二个故障,即不能部署新规则的问题。
规则其实是个我之前完全没有接触过的比较高端的技术,一般只在企业级的应用中才会使用,所以我一方面囫囵吞枣地了解了一下公司使用的开源规则引擎的基本情况,然后开始结合日志排查问题。结果我在与操作时间接近的日志里面看到了一些非常熟悉的内容,因为这个时候系统是部署在Windows服务器上,而这些同样的内容我以前曾经在原公司所使用的Linux服务器的系统上看到过,即类似“文件句柄数达到了最大限制”。这个时候我非常惊讶,因为我之前在Linux上碰到的问题是由于Linux服务器有默认的限制,一个应用程序打开的文件句柄数不能超过1024或者2048个,但这是个系统级的参数,可以自己修改,所以把这个参数修改到更高就解决问题了。但是windows上会有类似的问题吗?后来通过网上查询了解到,原来是客户采用的中间件服务器自带的JDK版本存在问题,调用了Windows的一个比较底层的函数,而该函数有打开文件句柄数的限制。经过试验,只要升级JDK版本就可以解决问题,但是这时候出现了另外一个问题,即客户不同意随意升级JDK,因为客户作为一个大型的外资金融企业,对于各种软硬件的版本,都有着严格的要求和规范,只有经过正规的测试后的版本才能够允许部署,现在不能因为我发现的问题就随便升级。
这个时候比较纠结,如果要解决问题就得升级JDK版本,但是客户又要求必须经过全面测试之后才能升级,而这时候我们显然没有时间针对JDK安排全面的测试。最后我灵机一动,既然此问题是由于在部署规则的时候,系统打开了过多的文件句柄l,而且这时候我们部署的最终系统是以war包方式部署,在war包里面最终的部署程序是以单独的class文件方式存在,并没有打包成jar文件,如果我们先打包成jar文件,那对系统来说就是一个jar文件,而不是成千上万个class文件,这时候再部署,会不会有效呢?结果测试之后发现居然真的有效,这样我们既不需要升级JDK,也不需要做别的大的改造,仅仅是改变一下最终发布的代码的方式,就解决了这个问题。
于是,一个星期之内,我一下子解决了两个很麻烦的技术问题,开始在项目组内有立足之本了。