第8页


  • 线上故障主要会包括cpu、磁盘、内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍。同时例如jstack、jmap等工具也是不囿于一个方面的问题的,基本上出问题就是df、free、top 三连,然后依次jstack、jmap伺候,具体问题具体分析即可。

    CPU

    一般来讲我们首先会排查cpu方面的问题。cpu异常往往还是比较好定位的。原因包括业务逻辑问题(死循环)、频繁gc以及上下文切换过多。而最常见的往往是业务逻辑(或者框架逻辑)导致的,可以使用jstack来分析对应的堆栈情况。

    使用jstack分析cpu问题

    我们先用ps命令找到对应进程的pid(如果你有好几个目标进程,可以先用top看一下哪个占用比较高)。接着用top -H -p pid来找到cpu使用率比较高的一些线程JAVA 线上故障排查完整套路!牛掰!

    JAVA 线上故障排查完整套路!牛掰!

    来源:fredal.xin/java-error-check线上故障主要会包括cpu、磁盘、内存以及网络问题,而大多数故障可能会包含不止一个层面的问题,所以进行排查时候尽量四个方面依次排查一遍。同时例如jstack、jmap等工具也是不囿于一个方面的问题的,基本上出问题就是df、free、top 三连,然后...

    Java知识 2021-09-20 52 0

  • No.1 树莓派是什么?

    Raspberry Pi(中文名为树莓派,简写为 RPi,(或者 RasPi / RPI) 是为学习计算机编程教育而设计),只有信用卡大小的微型电脑,其系统基于 Linux。随着 Windows 10 IoT 的发布,我们也将可以用上运行 Windows 的树莓派。

    自问世以来,受众多计算机发烧友和创客的追捧,曾经一“派”难求。别看其外表“娇小”,内“心”却很强大,视频、音频等功能通通皆有,可谓是麻雀虽小,五脏俱全。

    1. 用我的话理解

    用我的话理解就是树莓派就是一台主机,你可以外接显示器,键盘鼠标,u盘等等外设,因为它体积很小,而且又有很多串口和外接的口,可以直接调用很多底层硬件。

    2. 市面上的型号

    市面上大多是 3 代 B+ 型,淘宝一搜树莓派一大堆都是,价钱纯主板(不要任何外设)在 230+ 左右,有点小贵,超过我的预算,所以我继续寻找廉价的,终于让我发现了一款 100+ 的树莓派。

    3. 树莓派 zero w

    树莓派 zero w 是一款 mini 的树莓派,体质只有 3b+ 的 1/3。实际到手后,你会发现它真的超级小,超级可爱。以下是我的实物图,你可以看看大小到底有多 mini。

    如何搭建一台永久运行的个人服务器?

    如何搭建一台永久运行的个人服务器?

    来源:segmentfault.com/a/1190000021143144 No.1 树莓派是什么? Raspberry Pi(中文名为树莓派,简写为 RPi,(或者 RasPi / RPI) 是为学习计算机编程教育而设计),只有信用卡大小的微型电脑,其系统基于 Linux。随着 Windows 10 I...

    Java知识 2021-09-19 70 0

  • 介绍

    在SpringBoot的Web项目中,默认采用的是内置Tomcat,当然也可以配置支持内置的jetty,内置有什么好处呢?

    针对目前的容器优化,目前来说没有太多地方,需要考虑如下几个点

    针对上述的优化点来说,首先线程数是一个重点,初始线程数和最大线程数,初始线程数保障启动的时候,如果有大量用户访问,能够很稳定的接受请求。

    而最大线程数量用来保证系统的稳定性,而超时时间用来保障连接数不容易被压垮,如果大批量的请求过来,延迟比较高,不容易把线程打满。这种情况在生产中是比较常见的 ,一旦网络不稳定,宁愿丢包也不愿意把机器压垮。

    jvm优化一般来说没有太多场景,无非就是加大初始的堆,和最大限制堆,当然也不是无限增大,根据的情况进快速开始

    在spring boot配置文件中application.yml,添加以下配置

    server:
      tomcat:
        min-spare-threads: 20
        max-threads: 100
      connection-timeout: 5000

    这块对tomcat进行了一个优化配置,最大线程数是100,初始化线程是20,超时时间是5000ms

    推荐下自己做的 Spring Boot 的实战项目:

    https://github.com/YunaiV/ruoyi-vue-pro

    Jvm优化

    这块主要不是谈如何优化,jvm优化是一个需要场景化的,没有什么太多特定参数,一般来说在server端运行都会指定如下参数

    初始内存和最大内存基本会设置成一样的,具体大小根据场景设置,-server是一个必须要用的参数,至于收集器这些使用默认的就可以了,除非有特定需求。

    1.使用-server模式

    设置JVM使用server模式。64位JDK默认启动该模式

    java -server -jar springboot-1.0.jar

    2.指定堆参数

    这个根据服务器的内存大小,来设置堆参数。

    java -server -Xms512m -Xmx768m  -jar springboot-1.0.jar

    设置初始化堆内存为512MB,最大为768MB。

    3.远程Debug

    在服务器上将启动参数修改为:

    java -Djavax.net.debug=
    ssl -Xdebug -Xnoagent -Djava.compiler=
    NONE -Xrunjdwp:transport=
    dt_socket,server=y,suspend=
    n,address=8888 -jar springboot-1.0.jar

    这个时候服务端远程Debug模式开启,端口号为8888。

    在IDEA中,点击Edit Configuration按钮。

    Spring Boot 这样优化,让你的项目飞起来!

    Spring Boot 这样优化,让你的项目飞起来!

    来源:cnblogs.com/superfj/p/8667977.html 介绍 在SpringBoot的Web项目中,默认采用的是内置Tomcat,当然也可以配置支持内置的jetty,内置有什么好处呢?针对目前的容器优化,目前来说没有太多地方,需要考虑如下几个点针对上述的优化点来说,首先线程数是一个重点,...

    Java知识 2021-09-19 60 0
  • 借助Redis锁,完美解决高并发秒杀问题

    借助Redis锁,完美解决高并发秒杀问题

    来源:cnblogs.com/zumengjie/p/12187669.html场景:一家网上商城做商品限量秒杀。 1 单机环境下的锁 将商品的数量存到Redis中。每个用户抢购前都需要到Redis中查询商品数量(代替mysql数据库。不考虑事务),如果商品数量大于0,则证明商品有库存。然后我们在进行库存扣...

    Java知识 2021-09-18 64 0

  • 最初是觉得我们打工人,在历史的浪潮中,我们都被推着上岸。电子产品和移动互联网,把我们的生活节奏大大提速了,所以很多人都忘记了生活和工作中的关系。

    所以在深圳这个城市的各个街道上,都能看到忙忙碌碌的年轻人的身影,为着未来而奔波,驻足观望生活美好的风景都会成了奢侈,继而很多人忘记了生活和工作的关系。

    我之前辩证过生活跟工作的关系,工作只为更好的生活,但工作并不是生活的全部。

    然而我们这些被时代推赶的人,有多少能够明白这样的道理?


    最近跟一个朋友聊天时,他说到了一句话:如果一份工作,钱没赚到,身体也垮了,还没时间陪伴到家里人和孩子的成长,那么我们工作的目的仅仅是为了一口饭吗?

    这个朋友最后回了老家,虽然工作不一定如意,但对于生活的质量的提高,我知道这是他内心追求的东西。

    我在读书时代就嘲笑着那些以健康为代价,拼命工作,最后拿钱买健康的人,会恍然大悟生命中最重要的是什么。

    然而当时满嘴的不屑和嘲笑,在我被历史的浪潮推着往前走时,再回头看,发现我也已经成为了以前嘲笑的一员了。

    原来,我们真的最终都会变成自己讨厌的样子。

    唠叨了一些题外话,生活要继续,工作也要继续,希望大家能够在工作中更好的生活。

    复盘能力

    股市中的高手都有复盘的习惯,在复盘中对当天的市场全貌进行静态观察,发现白天动态趋势下无法发现的问题,总结得失。

    我们常见的复盘,更多的是见于公司出现事故/问题后的回顾和总结。比如常见的运维层面的故障恢复的复盘核心步骤:

    这是对运维对每次故障的总结,目的是为了我们后续不会再犯同样的错误,或者是出现类似的错误时,我们能更好的应对。


    或许很多人都还没认识到复盘的威力,我们再看一下身边常见的案例。

    容易犯错是人类与生俱来的弱点,但我们可以培养自己的复盘能力,不断地在尝试和失败中学习,总结属于自己的经验,在后续的路上不会再重复犯错,这个所带来的结果不亚于学习新的东西。


    通过简单的案例,我们能看出,复盘最直接的目的,是对我们所发生的结果进行审视和总结。

    然而,在真正的生活以及工作中,复盘并不仅仅只是简单的总结。

    举个例子,早上到公司,我们制定了进行的任务是完成A,B,C三件事,到下班了,我们发现只完成了A和B,那么我们是如何复盘今天的任务执行如何改进呢?

    1. 既定目标是否合理

    既定目标的合理性是非常重要的,比如我们理想中是做完 ABC 三件事,但是事实上会有偏差,所以我们要做的就是调整目标,一旦经常处于自我感觉任务完不成,事情没做好,是很容易导致自我怀疑以及负面情绪,这种情绪是相当有害的。

    2. 在执行过程中的策略改进

    比如说在执行 B 的时候,被其他事情影响花费了额外的时间,那么我们就要审视我们的时间和任务安排了。

    我们的时间有个非常重要的四象限划分法

    程序员有未来吗?

    程序员有未来吗?

    来源:www.cnblogs.com/lex-wu/p/14610110.html最初是觉得我们打工人,在历史的浪潮中,我们都被推着上岸。电子产品和移动互联网,把我们的生活节奏大大提速了,所以很多人都忘记了生活和工作中的关系。所以在深圳这个城市的各个街道上,都能看到忙忙碌碌的年轻人的身影,为着未来而奔波,驻...

    Java知识 2021-09-18 58 0
  • 为什么不管大厂小厂,面试总是死磕HashMap?

    比如:说一说 HashMap 的内部数据结构。这就是典型的 HashMap 面试题。根据题目要求我们可以知道:该题是一个数据结构问题,可以从 HashMap 的底层数据结构进行分析,建议从多个不同 jdk 版本进行分析。分析片面 没有深入要想回答得好,你需要涉及到多个知识点,比如数据结构、多线程安...

    Java知识 2021-09-18 66 0
  • 又一个巨头决定彻底放弃Docker,全面拥抱K8S!

    又一个巨头决定彻底放弃Docker,全面拥抱K8S!

    容器内抓包定位网络问题容器进程主动退出、只能运行一个参数JVM 参数在容器中突然失效了解云原生的前世今生以及面试必备技术概念;深入掌握 K8S、Istio、Serverless 核心组件剖析;手把手带你从 0 搭建 K8S 集群;系统性提升云原生架构设计能力。高开和架构师都在研究的云原生技术你需要真正掌握它...

    Java知识 2021-09-17 64 0

  • 推荐下自己做的 Spring Boot 的实战项目:

    https://github.com/YunaiV/ruoyi-vue-pro

    2. AbstractRoutingDataSource

    基于特定的查找key路由到特定的数据源。它内部维护了一组目标数据源,并且做了路由key与目标数据源之间的映射,提供基于key查找数据源的方法。

    Spring Boot + MyBatis + MySQL 实现读写分离!

    Spring Boot + MyBatis + MySQL 实现读写分离!

    来源:cnblogs.com/cjsblog/p/9712457.html 1. 引言 读写分离要做的事情就是对于一条SQL该选择哪个数据库去执行,至于谁来做选择数据库这件事儿,无非两个,要么中间件帮我们做,要么程序自己做。因此,一般来讲,读写分离有两种实现方式。第一种是依靠中间件(比如:MyCat),也就...

    Java知识 2021-09-17 94 0

  • 从手动编码到自动化,从重复工作到创新,开发人员工具随着技术的发展而不断发展。阿里巴巴集团和阿里巴巴云已通过开源发布和基于云的实施向公众提供其技术。通过在各种业务场景中的多年开发积累了这些技术。本文介绍了一些阿里巴巴开发人员工具,希望它们可以帮助您的开发过程更加高效和优雅。

    阿里巴巴常用的12个后端开发工具

    阿里巴巴常用的12个后端开发工具

    来源:www.jianshu.com/p/4d1a4606ef61从手动编码到自动化,从重复工作到创新,开发人员工具随着技术的发展而不断发展。阿里巴巴集团和阿里巴巴云已通过开源发布和基于云的实施向公众提供其技术。通过在各种业务场景中的多年开发积累了这些技术。本文介绍了一些阿里巴巴开发人员工具,希望它们可以帮...

    Java知识 2021-09-17 82 0
  • 图片

    那么,为什么会有这样的要求呢?背后的思考是什么呢?

    其实,我在之前的CodeReview中,看到过以下这样的低级错误:

    if(bigDecimal == bigDecimal1){

        // 两个数相等

    }

    这种错误,相信聪明的读者一眼就可以看出问题,因为BigDecimal是对象,所以不能用 ==来判断两个数字的值是否相等。

    以上这种问题,在有一定的经验之后,还是可以避免的,但是聪明的读者,看一下以下这行代码,你觉得他有问题吗:

    if(bigDecimal.equals(bigDecimal1)){

        // 两个数相等

    }

    可以明确的告诉大家,以上这种写法,可能得到的结果和你预想的不一样!

    先来做个实验,运行以下代码:

    BigDecimal bigDecimal = new BigDecimal(1);

    BigDecimal bigDecimal1 = new BigDecimal(1);

    System.out.println(bigDecimal.equals(bigDecimal1));


    BigDecimal bigDecimal2 = new BigDecimal(1);

    BigDecimal bigDecimal3 = new BigDecimal(1.0);

    System.out.println(bigDecimal2.equals(bigDecimal3));


    BigDecimal bigDecimal4 = new BigDecimal("1");

    BigDecimal bigDecimal5 = new BigDecimal("1.0");

    System.out.println(bigDecimal4.equals(bigDecimal5));

    以上代码,输出结果为:

    true

    true

    false

    BigDecimal的equals原理

    通过以上代码示例,我们发现,在使用BigDecimal的equals方法对1和1.0进行比较的时候,有的时候是true(当使用int、double定义BigDecimal时),有的时候是false(当使用String定义BigDecimal时)。

    那么,为什么会出现这样的情况呢,我们先来看下BigDecimal的equals方法。

    在BigDecimal的JavaDoc中其实已经解释了其中原因:

    Compares this  BigDecimal with the specified Object for equality.  Unlike compareTo, this method considers two BigDecimal objects equal only if they are equal in value and scale (thus 2.0 is not equal to 2.00 when compared by  this method)

    大概意思就是,equals方法和compareTo并不一样,equals方法会比较两部分内容,分别是值(value)和标度(scale)

    对应的代码如下:

    为什么阿里巴巴禁止使用BigDecimal的equals方法做等值比较?

    为什么阿里巴巴禁止使用BigDecimal的equals方法做等值比较?

    BigDecimal,相信对于很多人来说都不陌生,很多人都知道他的用法,这是一种java.math包中提供的一种可以用来进行精确运算的类型。很多人都知道,在进行金额表示、金额计算等场景,不能使用double、float等类型,而是要使用对精度支持的更好的BigDecimal。所以,很多支付、电商、金融等业务...

    Java知识 2021-09-16 68 0
识海教程

识海教程

每天学习技术知识,每天进步多一点点。

  • 229024阅读数
  • 4评论数

关于识海

网站将会逐步收集越来越多的技术文章,当然将来也会开启投稿功能,各位朋友们有好的文章可以分享给大家