今天早上来收到报障,视频生产流程不同了,都进不了lego,经排查,一个pingback服务访问超时,程序每次访问都起一个线程,由于服务已经挂掉了,占用太多的线程不能释放,服务坚挺了1天后,终于OutOfMemoryError: unable to create new native thread了。
经了解pingback的服务已经被人下线了,机器都找不着了,听说是个没有的东西,所以决定把代码中相关的逻辑都去掉。发现同事负责的模块也需要修改,让他一起修改。总共改了三四个模块,到1点钟终于上线完成了,好了吃饭去。吃完饭往回走的路上,收到别人反馈,给我发了一张图,曲线开始下降 的时间刚好是上线的时间,吓死宝宝了,赶快查,半天没有查出来问题,赶快回滚,回滚完还是没有好。后来发现我查错地方了,根本不需要回滚,汗,查到原因是没有meta所以流程中止,同时接到反馈api服务报500错误,不能设置meta。终于对上了,最终查到500错误的原因是,
把:
public boolean isPPSAppList(int appId) {
boolean result = false;
List<OpConfig> wirtelist = opConfigService.getChildrenNodes("pps_app_id_list");
if(wirtelist != null && wirtelist.size() > 0) {
for(OpConfig config : wirtelist) {
String value = config.getValue();
if(appId == StringUtil.parseInt(value)) {
return true;
}
}
}
return result;
}
改成了:
public boolean isPPSAppList(Integer appId) {
if(appId == null){
return false;
}
boolean result = false;
List<OpConfig> wirtelist = opConfigService.getChildrenNodes("pps_app_id_list");
if(wirtelist != null && wirtelist.size() > 0) {
for(OpConfig config : wirtelist) {
String value = config.getValue();
if(appId == StringUtil.parseInt(value)) {
return true;
}
}
}
修改了方法的参数声明,导致了:
java.lang.NoSuchMethodError: com.qiyi.videocloud.openplatform.service.thridparty.PpsugcService.isPPSAppList(I)Z
com.qiyi.openplatform.api.FileController.uploadMeta(FileController.java:986)
sun.reflect.GeneratedMethodAccessor612.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
java.lang.reflect.Method.invoke(Method.java:601)
org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213)
把方法的参数由int改成interger竟然会出NoSuchMethod,好想不通,后来看到这篇文章http://blog.csdn.net/zgs_shmily/article/details/46604059 和http://blog.csdn.net/yuan_hai_long/article/details/51490850 略懂。原来编译器是会严格按照参数的类型和返回值来查找方法的,lib库修改了参数,没有编译调用方,调用方还按照之前的方法参数和返回值去找,就是找不到的。我去问了同事,他说他是整体编译的。我让他在测试环境重现一下这个问题,果真也出了问题,然后他再调用的类里面加了行日志,再次运行,就好了,因为加了日志就编译器就会重现编译。调用方和lib库同时做了修改就没有问题了,之前是用mvn package打包的,编译器发现java类没有变化所以没有重新编译,少了一个clean费了这么大的周折,也算是涨知识了。
相关推荐
有一些基础东西真的还搞不清楚,看看这个文档int和Integer的区别,个人感觉讲的比较通俗易懂,谢谢原创者!保存了
JAVA-int和Integer的区别1.zip
mybatis返回int会报错,改成Integer封装类型可以解决,具体参考我的博客
Java中int和Integer的区别.doc
Java中int和Integer的区别
int与integer的区别从大的方面来说是基本数据类型与其包装类的区别: int 是基本类型,直接存数值,而integer是对象,用一个引用指向这个对象 1.Java 中的数据类型分为基本数据类型和复杂数据类型 int 是...
int的默认值为0,而Integer的默认值为null,即Integer可以区分出未赋值和值为0的区别,int则无法表达出未赋值的情况,例如,要想表达出没有参加考试和考试成绩为0的区别,则只能使用Integer。在JSP开发中,Integer的...
举例分析 equals 和 hashcode 方法,hashcode应该怎么样生成 8个基本类型与基本对象的比较:byte与Byte shot与Short int与Integer long与Long float与Float double与Double char与Character
int与Integer的区别(Java各种数据类型详细介绍及其区别).doc
主要介绍了Mybatis返回int或者Integer类型报错的解决办法,非常不错,具有参考借鉴价值,需要的朋友可以参考下
一、先说说int与integer的区别 int 是基本数据类型,默认值为0,不需要进行实例化 integer 是引用数据类型,是int的封装类型,默认值为null,创建该类型需要进行实例化。 基本数据类型是可以用“==”进行比较...
本文主要介绍了Java Integer两种转int方法比较。具有很好的参考价值,下面跟着小编一起来看下吧
主要介绍了Java int与integer的对比区别的相关资料,需要的朋友可以参考下
1. 理解自动装箱、拆箱 2. 源码分析 3. 原始类型线程安全
现有一个接口DataOperation定义了排序方法sort(int[]) 和查找方法search(int[], int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法,类BinarySearch 的binarySearch (int[], int)方法实现了二分查找...
主要介绍了Java中int和Integer的区别文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
Integer类的使用方法,在别的地方找的,是个干粮啊
由int类型转换为long类型是向上转换,可以直接进行隐式转换,但由long类型转换为int类型是向下转换,可能会出现数据溢出情况: 主要以下几种转换方法,供参考: 一、强制类型转换 [java] long ll = 300000; int ...
mybatis逆向工具generator,中文注释,把自动生成的Byte改成了Integer