2023年12月3日发(作者:)

常见问题dubbo远程调用异常:1、nFieldException: : '4jLoggerAdapter' could not be instantiated原因:序列化时,动态初始化日志组件异常,示例: encesubjectinvestrecord类 //slf4j做了静态缓存,允许定义为非静态,不影响性能.(log4j则没有缓存,基于性能考虑必须定义为静态) private Logger logger=ger();

解决办法: private static final Logger logger=ger();

2、ion: Dubbo client can not supported string message: in channel: NettyChannel [channel=[id: 0x10ab5cd0, /192.168.1.63:55657 => /192.168.1.31:30001]], url: dubbo://192.168.1.31:30001/ParamRmiService?anyhos原因:请求或响应的数据包超长(默认8M),导致数据包解码/解包异常解决办法(加大到16M):

3、eption: Failed to invoke the method collect in the service rService. No provider available for the service rService from registry 192.168.1.31:2181原因:dubbo的monitor服务没开启解决:开启monitor服务即可.不影响应用程序的服务,开发人员可忽略无需处理.5、远程调用超时多次的问题 原因:dubbo默认超时重试参数(retries)没有设置,使用默认值(默认值为2) 解决: 如是服务提供者,则增加以下配置: 如是服务消费者,则增加以下配置: 以上均为全局设置,retries参数也可以单独设置在上,可覆盖全局设置,根据具体业务场景,需超时重试的可自行设置。6、PC WEB 异常日志: 2016-04-05 00:04:39,464 ERROR (:344) ConsumeMessageThread_8: 消费消息topic=[tzg-topic-msg],消息tag=[tzg-tag-currentbaoRepaySuccess],消息body=[744926 eption: Failed to invoke the method findByKey in the service MQRmiService. Tried 1 times of the providers [10.171.212.136:30001] (1/3) from the registry 10.171.221.115:2181 on the consumer

TimeoutException: Read timed out对应的rmi服务,rmi服务异常日志:2016-04-05 00:04:23,950 WARN (:48) RMI TCP Connection(252453)-10.251.252.3: [DUBBO] invoke time out. method: findByKeyarguments: [99-37425-602788] , url is rmi:分析:从以上异常日志中,可以看出是执行超时:超时时间timeout=10000,实际执行时间:10743 ms原因:读超时、服务提供者服务中断或耗时太长、网络延时太长的原因解决: 首先排除网络延时的情况 优化代码和SQL,减少执行时间(本质上解决问题) 延长超时时间(设置RocketMQRmiService服务timeout时间为11000),来规避问题: 在服务提供者和服务消费者设置超时时间(提供者和消费者的读超时时间建议设置一致,以服务提供者为主) 以上为全局设置,设置的超时时间是所有服务的超时时间,值为所有RPC调用的是一个平均时长。一般不建议改动全局设置,会影响所有RPC的服务调用超时时间.某个RPC服务调用超时,建议只改对应的service服务(异常堆栈中的提示)或method的超时时间(

原因:zookeeper服务没开启或网络不通解决:登录服务器查看服务是否开启: windows:netstat -ano|findStr 2181 linux: netstat -anp |grep 2181 或 ps -ef|grep zookeeper没有开启服务,开启服务即可.确定zookeeper服务已开启的情况下,依旧报错的情况下,在本地cmd下执行:

telnet 192.168.1.31 2181如提示telnet不是内部或外部命令,打开控制面板-->程序和功能-->打开或关闭windows功能 找到telnet客户端勾选,重新打开cmd执行.如没有异常提示(黑窗口光标闪动)表示端口可以连通,程序会自动重连,如出现异常提示表示端口不通,说明服务为开启或网络端口不通(防火墙)。2、Opening socket connection to server 192.168.1.31/192.168.1.31:2181. Will not attempt to authenticate using SASL (unknown error)WARN Cnxn - Session 0x0 for server null, unexpected error, closing socket connection and attempting tException: Connection refused原因:通常是ip或端口配置错误,确定ip或端口正确的情况下,确认服务是否已经开启,网络端口是否通畅,服务端和客户端版本是否一致.解决:确认ip和端口是否正确,确认服务是否开启,端口是否通畅,统一客户端和服务端的版本3、ERROR tionState - Connection timed out for connection string (192.168.1.31:2181) and timeout (15000) / elapsed (30220)rConnectionLossException: KeeperErrorCode = ConnectionLoss原因:连接超时,确认网络是否通畅(网络是否有时延较长或不稳定中断的情况),或服务停掉断线重连解决:排除网络原因的前提下,修改zookeeper配置参数4、ConnectException: Connection refused: no further information 原因:连接拒绝、排除网络端口通畅、对应的服务提供者服务没起的情况下,就是连接数超限(zookeeper默认最大的连接数为60) 解决:首先排除网络、防火墙原因、服务提供者服务没开启的情况(telnet ip port)。 修改加入maxClientCnxns=0 0为不限制最大连接数,存在DDOS攻击风险,只能用于开发、测试环境。正式生产环境需指定合理的数值druid数据源异常:1、[ERROR] 2016-03-25 15:23:25,326 - ataSource -3444 [Druid-ConnectionPool-Create-169943243] ERROR ataSource - create connection error, url: jdbc:mysql://192.168.1.28:3306/tzgdev31?eption: Access denied for user 'tzgdev31'@'192.168.1.31' (using password: YES)at SQLException(:957)原因:数据库的用户名或密码不正确解决:确认数据库用户名、密码是否已经配置并且是否正确2、icationsException: Communications link failure2、icationsException: Communications link failure The last packet successfully received from the server was -196,405 milliseconds ago. The last packet sent successfully to the server was 1 milliseconds ago. at tance(Unknown Source) ... Caused by: eption: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost. at lly(:2957) at ndReadPacket(:3375) ... 70 more原因:数据库连接池连接异常,可能原因: 本地/数据库服务器网络问题(mysql服务器的DNS失效、防火墙)

数据库服务停掉

死锁导致事务提交失败超时导致连接重置关闭、代码问题执行时间过长导致连接重置关闭. 数据源配置问题 mysql服务器配置问题(mysql连接默认8小时无活动自动断开)解决: 排除网络、数据库以及事务问题的前提下, 在JDBC URL上添加?autoReconnect=true,连接自动恢复在MySQL4及其以下版本适用。MySQL5中已经无效了,必须调整系统变量来控制了(interactive_timeout、wait_timeout) 在druid数据源配置上增加 /alibaba/druid/issues/1022 testOnBorrow和testOnReturn在生产环境一般是不开启的,主要是性能考虑。失效连接主要通过testWhileIdle保证,如果获取到了不可用的数据库连接,一般由应用处理异常。 mysql配置中的wait_timeout参数(服务器关闭非交互连接之前等待活动的秒数)和interactive_timeout参数(服务器关闭交互式连接前等待活动的秒数)默认是28800秒,也就是8小时。一般在生产环境这个数值会被设置为7天甚至24天(最大21474833、Caused by: lArgumentException: Failed to t(:211)at (:123)Caused by: lArgumentException: String length must be a multiple of 64ToByteArray(:122)at 64ToByteArray(:107)原因:数据源密码解密失败,可能原因:druid版本太低(需要1.0.18);密码密文、公钥没有配置(配置文件或zookeeper中相应的配置参数缺失)或配置不正确(不匹配)

解决:正确配置密码密文、公钥,首先生成密码加密密文、公钥(以及私钥),示例(密码123456): java -cp Tools 123456 生成: privateKey:..... publicKey:MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBAIeC76TODu2SvmhBfyQ7yln9Calp7M+XKQaL5b381FAyPvxfDXzNefgQq680UnY6ZqWmtGyrbQEG2sfKaq6C85UCAwEAAQ== password:L6Exa3A1OQuB1TQkScv2Zrr61Sngu6kK7WnIy7Ds3RMMjeDxcW/p/r0h6R+Ddfkm/RaUxExel26O5ngElHsb5w==

数据源配置: 4、tablePropertyException: Invalid property 'useGlobalDataSourceStat' of bean class [ataSource]: Bean property 'useGlobalDataSourceStat' is not writable or has an invalid setter method. Did you m原因: druid版本太低没有升级,要求druid 1.0.18版本 版本冲突(同时存在新旧版本) jetty插件没有刷新加载:加载了新旧两个版本的依赖(实际工程依赖只有新版依赖)解决:打开工程pom文件(maven pom editor插件编辑器打开),打开Dependency Hierarchy便签页视图,在右上角Filter输入druid,根据左侧视图中显示的过滤结果,确定是druid版本过低还是依赖冲突,版本太低升级版本号: a druid 1.0.18 如果是依赖冲突,则删除或排除低版本的依赖即可如工程依赖里只有一个(正确版本的)依赖(实际工程依赖只有高版的依赖),则可能是jetty插件加载问题,插件依旧同时加载新旧版本的依赖(从启动信息中可以查看到),解决:在(debug) run configurations中的jetty webapp选择相应的工程,在右侧的project重新选redis异常:1、JedisConnectionException: Could not get a resource from the pool原因:连接池耗尽(客户端去redis服务器拿连接,池中无可用连接,即池中所有连接被占用,且在等待时候设定的超时时间后还没拿到时,报出此异常),可能是: 对象没有释放一直占用,导致连接耗尽无法获取新的资源; maxActive设置太小 连接太多不够用需优化JVM和操作系统或增加服务进程解决: 检查代码确认对象连接都释放关闭; 调整JedisPoolConfig中maxActive为适合自己系统的阀值 .... 优化JVM内存设置,内存设置越高可用线程数越少 优化操作系统调高线程数 增加服务进程(部署多服务)2、JedisDataException: READONLY You can't write against a read only slave原因:主节点Crash掉,而slave配置了只读(slave-read-only)解决: 开启master节点、重启slave 关闭slave的readonly: redis-cli -h 127.0.0.1 -p 6379 set slave-read-only no工具/插件/软件问题:1、Cannot change version of project facet Dynamic Web Module to 3.0解决:在项目右键属性的Project facts中把Dynamci Web Module设置为3.0,如果报错则直接修改项目文件:工程.settings目录下的,同时把开头设置为:xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/xml/ns/javaee /xml/ns/javaee/web-app_3_">然后执行项目右键Maven的即可。2、cmd下启动tomcat异常:The JRE_HOME environment variable is not defined correctly解决:设置环境变量(建议设置用户环境变量)JRE_HOME。示例(cmd下):set JRE_HOME=D:Javajre73、eclipse打开文件是不能显示,异常提示:Graphic is disposed有多种原因可能导致此问题,可逐一尝试解决有多种原因可能导致此问题,可逐一尝试解决解决: 关掉工程,重新打开 关掉eclipse、重新打开 或删除工作空间.metadata下的.plugins文件夹

4、maven构建异常:

ctNotFoundException: Failure to find :maven-settings:jar:3.0.3 in :8081/nexus/content/groups/public was cached in the local repository, resolution will not be reattempted until the update interval of dev-releases has elapsed or updates are forced原因:本地仓库中缓存有相应的jar依赖,在私服上找不到相应的jar依赖

解决:如在私服中能找到相应的jar:%MAVEN_HOME%/conf/找到对应的profile修改更新策略always;如在私服中找不到相应版本的jar,从本地仓库上传jar.5、ArtifactNotFoundException: Could not find artifact :sisu-inject-plexus:jar:2.1.1 in dev-releases (:8081/nexus/content/groups/public)原因:在私服上找不到相应的jar或在本地仓库找不到相应的jar(jar包没有完全下载)解决: 如本地仓库有相应的jar文件,私服上没有相应的jar,从本地仓库上传jar文件 如本地仓库没有相应的jar,私服中有相应版本的pom文件,%MAVEN_HOME%/conf/找到相应的profile修改更新策略为never6、cannot be read or is not a valid ZIP file原因:对应的jar损坏解决:打开更新策略强制更新,或手工私服或公网仓库下载jar到本地仓库覆盖相应的jar文件7、cmd下允许java报错: Failed reading value of registry key: SoftwareJavaSoftJava Runtime Environment1.7JavaHome Error: could not find Error: Could not find Java SE Runtime Environment.原因:安装了jdk1.8或安装卸载后注册表残留解决:卸载JDK1.8,清理注册表,如问题依旧, cmd下允许regedit打开注册表编辑器,删除HKEY_LOCAL_MACHINESOFTWAREJavaSoft目录下,除Java Development Kit以外的其他项 以管理员权限删除C:WindowsSystem32文件夹下的, 和 文件8、打开eclipse报错:Error:opening registry key '....'

原因:注册表问题 解决:在的第一行加入: -vm D:/Java/jdk1.7.0_79/bin/9、Access restriction: The type 'BASE64Encoder' is not API (restriction on required library 'D:Javajdk1.6.0_')

原因:使用了java扩展包的类,eclipse把这些受访问限制的API设成了ERROR解决: 推荐改代码,使用64代替 或者在eclipse的jre设置里选择JDK(而不是jre) 或者把error改成warning警告: Windows -> Preferences -> Java -> Compiler -> Errors/Warnings -> Deprecated and trstricted API -> Forbidden reference (access rules): -> change to warning

或者在项目上右键properties,然后java bulid path-->Libraries-->jre System Library;在然后Access Rules-->Edit;Add,resolution选择accessible,下面填上** 点击确定即可!10、Description Resource Path Location Type Access restriction: The type 'DOMParser' is not API (restriction on required library 'D:Javajdk1.7.0_') /tzg-common/src/main/java/com/tzg/common/bbs/util line 34 Java Problem 原因:和上面的一样 解决:和上面一样,改源码或改eclipse的设置把Deprecated and trstricted API 的error改成warning11、Caused by: lStateException: Duplicate application configs: and 原因:maven插件特性导致的bug 解决:工程上右键maven-->disable workspace resolution,然后maven-->update project12、eclipse的jetty插件依赖加载问题:maven依赖升级或精简后、jetty启动时,依旧加载老版本依赖或加载已删除的依赖 原因:第一次启动时(或新建jetty webapp服务),一次性加载maven依赖,写入配置文件(默认在用户目录下_*.xml)中,后续不会加载maven的依赖变更. 解决:run configurations/debug configurations-->jetty webapp选择相应的工程,dependencies-->reset dependency overrides13、eclipse的problems视图显示警告信息: Implementation of project facet maven could not be found. Functionality will be limited. 解决:打开对应工程目录下的.settings目录下的文件,删除: 刷新工程 14、Failed to read artifact descriptor for XXX:XXX:jar:XXX 原因:一般是操作取消或网络原因导致包下载不全导致 解决:在maven的本地仓库找到对应jar的目录删除,重新maven update获取更新,重新下载代码、依赖、配置问题:1、sDefFoundError: io/netty/util/concurrent/EventExecutorGroup 原因:netty依赖缺失,或版本冲突:工程中引入了dubbo、zookeeper/curator、rocketmq都依赖netty,各个netty版本冲突 解决: 依赖缺g(:99) at Error(:433) ..... Causexmlns:cache="/schema/cache" xmlns:spring="/schemas/spring" xmlns:util="/schema/util" xmlns:mvc="framew/schema/cache /schema/cache/ /schemas/spring /schemas/-Control-Allow-Origin *; add_header Access-Control-Allow-Headers X-Requested-With; add_header Access-Control-Allow-Methods GET,POST,OPTIONS; 或者在工程依赖中增加依赖: NULL(numTotalEnvelopesUsed,0) + ?, numOutstanding = IFNULL(numOutstanding,0) + ?, numOutstandingProfit = IFNULL(numOutstandingProfit,0) + ?, numTotalInvest = IFNULL(numTotalInvest,0) + ? where iLo(readonly=true),尽量减少不必要的共享锁问题,特殊情况下需要配置事务,务必设置事务传播特性为SUPPORTS 查看数据库的事务隔离级别: SELECT @@_isolation; SELECT @@_isolation; SEL[tMessageSourceResolvable: codes [dex,pageIndex]; arguments []; default message [pageIndex]]; default message [Failed to convert property FormatException: For input string: "(selectconvert(int,CHAR(95)+CHAR(33)+CHAR(64)+CHAR(50)+CHAR(100)+CHAR(105)+CHAR(108)+CHAR(101)+CHAR(109)+CHAR(109)+CHAR(97))FRO/content/groups/public/org/glassfish//3.0.1-b06-SNAPSHOT/. Return code is: 502 , ReasonPhrase:Bad Gateway. -> [Help 1] 原因:maven的全局/用create_time >= '2015-04-07 00:00:00' AND create_time <= '2015-04-07 23:59:59',这种写法是有问题的,可能有部分订单落在最后一秒(create_time是Timestamp类型,MySQL5.5版本Timestamp精度支持到秒,5.6版优化:问题示例1:@RequestMapping(value = "/emailAuthen", method = )@ResponseBodypublic Map emailAuthen(String vcEmail,HttpServletRequest request) { Map map = new HashMap(); try { ... } catch (Exception e) { ("邮箱认证异常:", e); (S, false); (E, sage()); } return map;}问题:异常只进行简单的记录和传递,没有区分细化处理(区分checked和unchecked exception),发生unchecked exception时,会输出异常堆栈到页面.修复:如上以上代码,异常没有特殊处理(没有转向特定页面或设置其他属性或输出其他消息),只是简单记录传递异常消息,可删除掉catch,然后在spring配置文件配置:问题示例2:tackTrace();或n("dynamicValidateCode:web:" + bus + ":" + dynamicValidateCode);问题:打印输出到控制台,仅仅适用于命令行启动web服务器(tomcat)的情况,以服务的方式启动(生产环境),是看不到相应的异常/消息输出,导致查不到相应的出错日志。需改为日志记录: private static final Logger LOG = ger(); ("发生...异常:{}", sage()); 或("dynamicValidateCode:web:{}:{}",bus,dynamicValidateCode)优化示例3:if (honeNumber(phoneNumber)) { (true, "手机号码已存在");}优化:(honeNumber(phoneNumber),"手机号码已存在");类似的代码:if(...){ return true;}else{ return false;}直接写成:return (...);如else块里有其他逻辑,可写成:if(...){ return true;}...return false;优化代码示例4:List list = null;if (id != 0) { list = stResourceByAccountId(id);} else { list = irstLevelResourceAll();}if (0 != ()) { for (Resource firstMemu : list) { Map map = new HashMap(); ("accountId", id + ""); ("parentID", () + ""); List secondList; if (id != 0) { secondList = ondResourceByAccountId(map); } else { secondList = ondResourceAll(map); } ldren(secondList); }}优化: //irstLevelResourceAll()和stResourceByAccountId(id);可合并为一个方法 //优化点:1、改掉了多层嵌套 2、性能优化,判断是否为空的情况下empty比求size快 if (li优化代码示例5:List menuItem = null;if (oginName().equals("root")) { menuItem = uByAccountId(0);} else { menuItem = uByAccountId(());}优化://"root".equals(...)常量写前面,变量写后面,避免空指针.()可能存在空指针List menuItem = uByAccountId("root".equals(oginName())?0:());;优化代码示例6:Message message = ssageById(id,());if(null==message){ ("{}:", "站内信查看操作非法"); return "redirect:/user/message/page";

}if(ginAccountId().intValue() != ().intValue()){ ("{}:", "站内信查看操作非法"); return "redirect:/user/message/page";}优化:Message message = ssageById(id, ());//优化1条件判断合并,合并重复代码;优化2对象判断调用工具类避免空指针;if (null == message || (ginAccountId(), ())) { ("站内信查看操作非法,messageId:{},accountId:{},返回错误状态码:{}", id, (),_UNAUTHORIZED); //优化3对于非法请求不响应请求,不做任何处理(不查询数据返回页面),请求直接丢弃返回错误码 ror(_UNAUTHORIZED); return null;}