首页 文章 精选 留言 我的

精选列表

搜索[解耦化],共10000篇文章
优秀的个人博客,低调大师

android studio每次启动都要在fetching Android sdk compoment information停好久 怎么解...

网上有人给出了方案: 1)进入刚安装的Android Studio目录下的bin目录。找到idea.properties文件,用文本编辑器打开。 2)在idea.properties文件末尾添加一行: disable.android.first.run=true ,然后保存文件。 3)关闭Android Studio后重新启动,便可进入界面。 可以解决。 分类: android solve 本文转自wanqi博客园博客,原文链接:http://www.cnblogs.com/wanqieddy/p/4349682.html如需转载请自行联系原作者

优秀的个人博客,低调大师

阿里云启动天池电力 AI 大赛 : 用 AI 解千万企业 " 用电之痛 "

近日,在云栖大会?南京峰会上,数据众智赛事平台阿里云天池平台联合扬中高新区政府、大航集团,启动首个电力 AI 大赛 ------ 大航杯 " 智造扬中 " 电力 AI 大赛。借助参赛工程师的智能算法提升电力预测调度能力。 " 用电之痛 " 是全国千万用电及售电企业的大难题。据悉,仅 2016 年全社会用电量达 59198 亿千瓦,其中 3.5% 因电力预测的偏差,而白白消耗。自去年 11 月国家售电制改革以来,华东等区域的大用户直接交易率先实行多 1 罚 1.1,少 1 罚 1.1 的政策,旨在缓解用电预测偏差、用电异常问题。电力的预测及调度,迫在眉睫。 天池电力 AI 大赛应运而生,帮助电力调度快速应变,促电力能源的智能使用。此次大赛将提供扬中市高新区经过脱敏后的 1000 多家企业的历史用电量数据、天气及企业规模及业务等数据,选手

优秀的个人博客,低调大师

解Bug之路-记一次调用外网服务概率性失败问题的排查

前言 和外部联调一直是令人困扰的问题,尤其是一些基础环境配置导致的问题。笔者在一次偶然情况下解决了一个调用外网服务概率性失败的问题。在此将排查过程发出来,希望读者遇到此问题的时候,能够知道如何入手。 起因 笔者的新系统上线,需要PE执行操作。但是负责操作的PE确和另一个开发在互相纠缠,让笔者等了半个小时之久。本着加速系统上线的想法,就想着能不能帮他们快速处理掉问题,好让笔者早点发完回去coding。一打听,这个问题竟然扯了3个月之久,问题现象如下: 每个client都会以将近1/2的概率失败,而且报错都为: 着手排查 和appserver开发以及对应的PE交流发现,appserver和nginx之间是短连接,由于是socketTimeOutException,于是能够排除appserver和nginx建立连接之间的问题。去nginx上排查日志,发现一个奇异的现象,如下图所示: 所有的appserver都是调用一台nginx一直成功,而调用另一台nginx大概率失败。而两台nginx机器的配置一模一样,还有一个奇怪的点是,只有在调用出问题的对端服务器时才会失败,其它业务没有任何影响,如下图所示: 由于这两个诡异的现象导致开发和PE争执不下,按照第一个现象一台nginx好一台nginx报错那么第二台nginx有问题是合理的推断,所以开发要求换nginx。按照第二个现象,只有调用这个业务才会出错,其它业务没有问题,那么肯定是对端业务服务器的问题,PE觉得应该不是nginx的锅。争执了半天后,初步拟定方案就是扩容nginx看看效果-_-!笔者觉得这个方案并不靠谱,盲目的扩容可能会引起反效果。还是先抓包看看情况吧。 抓包 其实笔者觉得nginx作为这么通用的组件不应该出现问题,问题应该出现在对端服务器上。而根据对端开发反应,他自己curl没问题,并现场在他自己的服务器上做了N次curl也没有任何问题(由于这个问题僵持不下,他被派到我们公司来协助排查)。于是找网工在防火墙外抓包,抓包结果如下: 时间点 源ip 目的ip 协议 info 2019-07-25 16:45:41 20.1.1.1 30.1.1.1 tcp 58850->443[SYN] 2019-07-25 16:45:42 20.1.1.1 30.1.1.1 tcp [TCP Retransmission]58850->443[SYN] 2019-07-25 16:45:44 20.1.1.1 30.1.1.1 tcp [TCP Retransmission]58850->443[SYN] 由于appserver端设置的ReadTimeOut超时时间是3s,所以在2次syn重传后,对端就已经报错。如下图所示: (注:nginx所在linux服务器设置的tcp_syn_retries是2) 抓包结果分析 从抓包得出的数据来看,第二台nginx发送syn包给对端服务,对端服务没有任何响应,导致了nginx2创建连接超时,进而导致了appserver端的ReadTimeOut超时(appserver对nginx是短连接)。 按照正常推论,应该是防火墙外到对端服务的SYN丢失了。而阿里云作为一个非常稳定的服务商,应该不可能出现如此大概率的丢失现象。而从对端服务器用的是非常成熟的SpringBoot来看,也不应该出现这种bug。那么最有可能的就是对端服务器本身的设置有问题。 登陆对端服务器进行排查 由于对方的开发来到了现场,于是笔者就直接用他的电脑登录了服务所在的阿里云服务器。首先看了下dmesg,如下图所示,有一堆报错: 感觉有点关联,但是仅靠这个信息无法定位问题。紧接着,笔者运行了下netstat -s: 这条命令给出了非常关键的信息,翻译过来就是有16990个被动连接由于时间戳(time stamp)而拒绝!查了下资料发现这是由于设置了 在NAT情况下将会导致这个被动拒绝连接的问题。而为解决上面的dmesg日志,网上给出的解决方案就是设置tcp_tw_recycle=1而tcp_timestamps默认就是1,同时我们的客户端调用也是从NAT出去的,符合了这个问题的所有特征。 于是笔者尝试着将他们的tcp_timestamps设为0, 又做了几十次调用,再也没有任何报错了! linux源码分析 问题虽然解决了,但是笔者想从源码层面看一看这个问题到底是怎么回事,于是就开始研究对应的源码(基于linux-2.6.32源码)。 由于问题是发生在nginx与对端服务器第一次握手(即发送第一个syn)的时候,于是我们主要跟踪下这一处的相关源码: 关于tcp_timestamps的代码就在tcp_v4_conn_request里面,我们继续追踪(以下代码忽略了其它不必要的逻辑): inttcp_v4_conn_request(structsock*sk,structsk_buff*skb) { ...... /*VJ'sidea.Wesavelasttimestampseen *fromthedestinationinpeertable,whenentering *stateTIME-WAIT,andcheckagainstitbefore *acceptingnewconnectionrequest. *注释大意为: *我们在进入TIME_WAIT状态的时候将最后的时间戳记录到peertables中, *然后在新的连接请求进来的时候检查这个时间戳 */ //在tcp_timestamps和tcp_tw_recycle开启的情况下 if(tmp_opt.saw_tstamp&& tcp_death_row.sysctl_tw_recycle&& (dst=inet_csk_route_req(sk,req))!=NULL&& (peer=rt_get_peer((structrtable*)dst))!=NULL&& peer->v4daddr==saddr){ /**TCP_PAWS_MSL==60*/ /**TCP_PAWS_WINDOW==1*/ //以下都是针对同一个对端ip //tcp_ts_stamp对端ip的连接进入time_wait状态后记录的本机时间戳 //当前时间在上一次进入time_wait记录的实际戳后的一分钟之内 if(get_seconds()<peer->tcp_ts_stamp+TCP_PAWS_MSL&& //tcp_ts最近接收的那个数据包的时间戳(对端带过来的) //对端当前请求带过来的时间戳小于上次记录的进入time_wait状态后记录的对端时间戳 (s32)(peer->tcp_ts-req->ts_recent)> TCP_PAWS_WINDOW){ //增加被动连接拒绝的统计信息 NET_INC_STATS_BH(sock_net(sk),LINUX_MIB_PAWSPASSIVEREJECTED); //进入丢弃和释放阶段 gotodrop_and_release; } } ...... } 上述代码的核心意思即是在tcp_timestamps和tcp_tw_recycle开启的情况下,同样ip的连接,在上个连接进入time_wait状态的一分钟内,如果有新的连接进来,而且新的连接的时间戳小于上个进入time_wait状态的最后一个包的时间戳,则将这个syn丢弃,进入drop_and_release。我们继续跟踪drop_and_release: 我们继续看下如果tcp_v4_conn_request返回0的话,系统是什么表现: 从源码的跟踪可以看出,出现此种情况直接丢弃对应的syn包,对端无法获得任何响应从而进行syn重传,这点和抓包结果一致。 和问题表象一一验证 为什么会出现一台nginx一直okay,一台nginx失败的情况 由于tcp的时间戳是指的并不是当前本机用date命令给出的时间戳。这个时间戳的计算规则就在这里不展开了,只需要知道每台机器的时间戳都不相同即可(而且相差可能极大)。由于我们调用对端采用的是NAT,所以两台nginx在对端服务器看来是同一个ip,那么这两台的时间戳发送到对端服务器的时候就会混乱。nginx1的时间戳比nginx2的时间戳大,所以在一分钟之内,只要出现nginx1的连接请求(短连接),那么之后的nginx2的连接请求就会一直被丢弃。如下图所示: 为什么对端自测一直正常 因为本机调用本机的时时间戳是一台机器(本机)上的,所以不会出现混乱。 为什么nginx2调用其它服务是正常的 因为其它外部服务所在服务器并没有开启tcp_tw_recycle。这个问题事实上将tcp_tw_recycle置为0也可以解决。另外,高版本的linux内核已经去掉了tcp_tw_recycle这个参数。 总结 由于当前ip地址紧缺和DNS报文大小的限制(512字节),大部分网络架构都是采用NAT的方式去和外部交互,所以设置了tcp_tw_recycle为1基本都会出现问题。一般这种问题需要对tcp协议有一定的了解才能够顺藤摸瓜找到最终的根源。

优秀的个人博客,低调大师

对JVM还一知半解?这篇文章让你彻底搞定JVM

对于Java开发者来说,想把自身能力提升到更高层次,某些JVM相关知识应该是优先级很高的。比如说GC策略,JVM调优。 就我在工作中遇到的情况来看:接触了几年Java,现在做Java Web的开发,实际关注Java本身的知识,之前对JVM关注的较少。 ● 控制台报错,就会直接百度,然后找答案,解决问题。看了JVM方面的书,才知道控制台的信息已经告诉你问题出在哪,只要懂JVM,很快就能解决问题,根本不用百度,上网查答案之类的。 ● JVM虚拟机帮助我们做了很多事情,如果你只是会用,而不懂它,在以后的开发遇到瓶颈(会接触到性能问题,分析堆空间分配是否合适,垃圾回收机制是否合理,有没有内存溢出,线程死锁等),就很难办了。 学习JVM,对理解Java有很大帮助。而且现在待遇好的公司,面试时基本都会考核JVM相关的问题,你如果不会的话,面试通过的机会很渺茫。 所以,掌握JVM很有必要。 你是不是在默默计划着把学习JVM提上日程了?这里推荐大家关注最新的JVM在线分享(一次难得的线上学习交流的机会)。分享内容包括:JVM内存结构、GC垃圾回收算法、JVM优化。 这次的分享人是李兴华,一个很受欢迎的“网红大咖”,有8年软件开发经验,给40多家大中型企业做过JAVA EE高级培训,讲课深入浅出、通俗易懂、语言精练、好评度特别高。(不少人入门Java是学他的视频过来的) 李兴华先后出版了《初级学java》、《Java开发实战经典》、《Java Web开发实战经典》、《Android开发实战经典》、《Oracle开发实战经典》、《Java核心技术精讲》等一系列畅销书。 除JVM之外,大家还能参与其他两场在线分享,可以根据自身需求选择学习 这次在线分享活动是由开课吧策划的,为的是让更多需要进阶提升的Java技术人了解“开课吧”这一品牌。之所以给大家推荐,是因为我相信这3场分享能给大家带来切实的收获和帮助,而不是注水的广告宣传。 对于之前刚结束的“Zookeeper集群搭建及Leader选举算法源码解析”这场分享,我前后也做了充分的了解:这场分享开放报名2天,报名1000+人,得到了参与者的肯定。 原文发布时间为:2018-10-16 本文来自云栖社区合作伙伴“Java架构沉思录”,了解相关信息可以关注“Java架构沉思录”。

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Nacos

Nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service 的首字母简称,一个易于构建 AI Agent 应用的动态服务发现、配置管理和AI智能体管理平台。Nacos 致力于帮助您发现、配置和管理微服务及AI智能体应用。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据、流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册