精华内容
下载资源
问答
  • 项目优化

    千次阅读 2018-10-16 20:01:30
    从问题原因分析可以将网站变慢分为两种原因,一是由于近期更新、数据库内存、硬件配置达到瓶颈、访问量激增等突发原因导致,二是由于整个项目中多个薄弱点同时出现了问题导致的。 问题定位 根据项目的架构、硬件...

    “世界上并没有完美的程序,但我们并不因此而沮丧,因为写程序本来就是一个不断追求完美的过程”。对于项目优化这一句箴言也是完全适用的,没有不需要优化的项目,区别是有些项目亟待优化,而有些项目的优化工作可以慢慢进行。

    项目优化涉及的知识面很广。优化的流程通常是根据项目的异常表现进行问题定位,模拟线上场景测试,对多次测试的结果进行综合评估得出合理的优化方案,进而优化再测试上线。项目优化不知是项目负责人需要掌握的内容,对于开发人员也需要了解优化方面的知识,让自己写的代码更加合理健壮。本文总结的项目优化方案是实际工作中积累的一些经验,希望能给有需要的朋友提供一些思路。

    本文总结的优化涉及到一下五方面
    在这里插入图片描述

    1、前端优化

    1. 使用分页加载、异步加载、分屏加载

    • 数据分步加载对于实现前端功能在是必不可少的。数据的分页展示可以使内容条理清晰,每页只展示定量的数据和数据总量,无论从库中做查询还是浏览器渲染数据都很轻松,而且只要在项目中引入PageHaper等分页插件即可。
    • 异步加载是页面渲染完成后执行方法实现特定效果,页面加载初期可以先渲染出整体轮廓,之后再加载详细内容。以京东官网为例,点击按钮后在1秒内最先加载出的内容包含logo、分类树、轮播图架子、推荐商品架子数据。对于用户来说1秒内看到轮廓,3-4秒内完成全部数据填充是可以接受的。但是如果是点击按钮后白屏4秒就才出现内容就该怀疑网站宕机了。
      在这里插入图片描述
    • 分屏加载也是降低服务器压力的一个有效手段。还拿京东首页举例,如果用户不滚动屏幕,默认只加载一个屏幕内的内容,用户在滚动屏幕时触发方法进行内容加载。实现数据分屏加载可以参考JS控制html分屏加载

    在这里插入图片描述

    2.精简高频访问页面

    • 高频访问页面是指项目主页、电商商品列表、登录页面、主站入口等用户访问频率较高的页面,高频页面往往是用户访问项目的必经之路。高频页面存在大量冗余代码,不仅会拖慢项目,而且会影响用户体验。为了减轻服务器的压力,建议尽量简洁的设计高频页面。在保证功能完整的前提下尽量减少与数据库的交互。对于页面上不太变更的内容,建议存在缓存数据里,或者以静态常量存在项目中。

    3.优先使用第三方的静态资源

    • 电商平台在接入第三方供应商时需要在商品页面展示相应图片信息,对于不是必须要落地的数据建议优先使用第三方的静态资源。比如主图、小图、详情图可以在浏览器加载时直接访问第三方的图片地址,图片数据不落地可以节省服务器开销,而且在更新商品数据时也只需要修改商品表字段即可。这样做的缺点是数据的展示要受到第三方的制约,如果对方的图片服务器出现问题,就意味着用户看不到对应的信息。
    • 对于通过功能上架商品的供应商来说,商品的图片是必须要保存在服务器的。为了降低服务器压力,可以将图片做压缩处理,比如用户上架的商品主图为a.jpg,我们可以相应生成多个规格的小图,图片名称为200X200a.jpg、100X100.jpg,200X200即位商品尺寸,这样我们可以在列表展示200X200的图片,购物车和收藏里展示100X100的图片,而且数据在展示是只需要固定的字符串“200X200”+a.jpg即可,可以把"200X200"、"100X00"设置为静态变量供前端调用,而在商品详情页面可以展示主图。

    2、服务端优化

    1.服务化拆分

    • java应用从单点结构到服务化再到微服务化,是解决海量用户需求的探索历程。传统的单点应用无力应对高并发和大体量数据。对于项目中公用且访问频率高的模块可以以微服务的形式剥离出主应用。主应用与各服务之间的调用关系通过注册中心进行分配管理,这样做的好处是可以降低主应用的负载,而且项目模块逻辑也更加分明,各个服务只需要专注于自己的模块,把自己需要负责的业务模块以接口的形式暴露给其他应用。比如短信、邮件、检索、日志等模块是业务逻辑较少的内容,可以优先服务化。至于涉及业务逻辑较多的模块,就要评估拆分对整个项目的冲击,在进行合理规划后再做拆分。

    2.使用消息队列

    • 对数据准确性要求较低的功能可以使用消息队列进行削峰填谷,比如订单支付后要对商品增加销量,商品修改后要更新检索系统的数据,对于这些功能可以维护一个消息队列去实现数据的延时处理,从而减少高峰期的应用压力。不过消息队列的使用会引发数据一致性、消息事物的问题,所以要在引入前就做好应对策略。

    3、操作系统优化

    1. 网络速度和服务器性能

    • 上行速率是指服务器给基站发送信息时的数据传输速率,下行速率是指基站向服务器发送信息时的传输速率。在生产环境中项目必不可少的要调取其他平台数据或者接口,例如调取短信运营商接口、调取供应商接口、调取物流接口等等。服务器作为项目的运行平台,网络速率自然会影响到项目访问效果和运行情况。

    • windows环境可以使用自带工具排查网络占用异常,打开资源管理器选择联网标签,在最下面列出了机器的所有网卡,包括虚拟网卡的线路速度和网络使用率:
      在这里插入图片描述

    • 上图展示出本服务器有一个网络适配器(网卡),实时占用率为0%。点击性能后选择资源监视器按钮,在资源监视器面板选择网络页签即可查看即时网络活动情况:
      在这里插入图片描述

    • 可以从‘网络活动的进程’看出当前有很多java应用在运行。可以勾选一个对应进程前的复选框即可看到这个应用的网络使用情况。

    • Linux下可以安装dstat工具进行统信息统计,安装命令为yum install -y dstat,安装完后就可以使用了,dstat非常强大,可以实时的监控cpu、磁盘、网络、IO、内存等使用情况。安装完成后输入‘dstat’即可查看cpu、disk、net、page、system信息。默认情况下,dstat每秒都会刷新数据。如果想退出dstat,你可以按"CTRL+C"键。
      在这里插入图片描述

    • CPU状态:CPU的使用率。这项报告更有趣的部分是显示了用户,系统和空闲部分,这更好地分析了CPU当前的使用状况。如果你看到"wait"一栏中,CPU的状态是一个高使用率值,那说明系统存在一些其它问题。当CPU的状态处在"waits"时,那是因为它正在等待I/O设备(例如内存,磁盘或者网络)的响应而且还没有收到。

    • 磁盘统计(dsk):磁盘的读写操作,这一栏显示磁盘的读、写总数。

    • 网络统计(net):网络设备发送和接受的数据,这一栏显示的网络收、发数据总数。

    • 分页统计(paging):系统的分页活动。分页指的是一种内存管理技术用于查找系统场景,一个较大的分页表明系统正在使用大量的交换空间,或者说内存非常分散,大多数情况下你都希望看到page in(换入)和page out(换出)的值是0 0。

    • 系统统计(system):这一项显示的是中断(int)和上下文切换(csw)。这项统计仅在有比较基线时才有意义。这一栏中较高的统计值通常表示大量的进程造成拥塞,需要对CPU进行关注。你的服务器一般情况下都会运行运行一些程序,所以这项总是显示一些数值。

    • dstat的其他使用参数可以参考Linux服务器 dstat 监控工具

    • 通过对系统网络环境的排查可以定位出是否因为网络导致系统响应缓慢,网站业务量激增可能导致原本设定的带宽无法满足实际需求,对于频繁调用网络的模块可以考虑做集群处理或者增加带宽,也可以采用微服务的形式将此模块抽离出主系统。

    2.web服务器代理优化

    出于对服务器的保护,正式项目会采用web服务器代理请求。web服务器的模式设定会影响到项目响应速度。apache在并发100时会出现响应缓慢的情况,可以选择MPM处理并发。可以用一个简单的方法鉴定web服务器代理效果:在使用域名请求项目响应缓慢的情况下,通过内网服务器使用IP直接访问项目,如果IP访问响应明显快于域名访问,那么就需要针对web服务器做优化了。

    4、数据库查询优化

    • 数据库的使用状况也会影响到项目响应时间,常见问题有:单表数据大、表锁死、表索引不合理、sql不合理、库的写入数据量不合理。单表数据大会是操作表的速度变慢,多个线程同时操作这一张表时会出现线程卡死的情况。针对数据量大的表可以采用定期备份清理,或者按照时间定期创建表。
    -----SqlServer查询查询数据库中所有表数据量-----
    DECLARE @SQL VARCHAR(MAX)  
    SELECT @SQL=ISNULL(@SQL+'  
    UNION ALL ','')+'SELECT '''+NAME+''' AS TB,COUNT(1) AS TOTAL FROM ['+NAME+']'  
    FROM SYS.TABLES  
    EXEC (@SQL) 
    
    • 针对表锁死、表索引不合理、sql不合理的情况在SqlServer下可以使用报表功能进行排查。打开SQL Server Management Studio选择相应数据库右键选择报表中的表准报表,选择相应事务选项找到当前较不合理的和较耗时的sql进行相应优化。
      在这里插入图片描述

    5、JVM优化

    由于代码不规范或者jvm参数设定不合理也会导致项目卡顿。代码不规范典型案例有:循环里new对象、死循环、不关闭输出流、多线程处理耗时逻辑、线程锁死。遇到这种情况需要针对表现定位问题所在,这些情况会导致服务器负载升高、CPU飙升,内存占用增大等现象。针对这种情况需要根据实际情况排查代码,比如定时器执行频繁时明显变慢了,那就对定时器模块仔细排查,调接口频率高变慢就针对性的排查接口模块代码。

    • 由于new对象过多或者jvm参数设定不合理导致的gc回收垃圾不及时,可以借助工具进行排查。windows环境建议使用jdk自带的jvisualvm工具,这个软件也可以远程查看Linux环境中的tomcat。这个工具包括对CPU、内存、线程、类都做了监控。在“工具”-》“插件”-》可用插件项中选择Visual GC并下载安装,选择项目使用的tomcat双击即可查看所有所有测量数据。切换到 “Visual GC"标签页
      在这里插入图片描述
    • 整个区域分为三部分:spaces、graphs、histogram
    • 1 spaces区域:代表虚拟机内存分布情况。从图中可以看出,虚拟机被分为Perm、Old、Eden、S0、S1
    • 注意:如果对每个区域基本概念不是很熟悉的可以先了解下java虚拟机运行时数据区这篇文字。
    • 相关原理可以参考这篇博文《【转】Java内存与垃圾回收调优》
    • 1.1 perm:英文叫做Permanent Generation,我们称之为永久代。(根据深入java虚拟机作者说明,这里说法不是不是很正确,因为hotspot虚拟机的设计团队选择把GC分代收集扩展至此而已,正确的应该叫做方法区或者非堆)。
    • 1.1.1 通过VM Args:-XX:PermSize=128m -XX:MaxPermSize=256m 设置初始值与最大值
    • 1.2 heap:java堆(Java heap)。它包括老年代(图中Old区域)和新生代(图中Eden/S0/S1三个统称新生代,分为Eden区和两个Survivor区域),他们默认是8:1分配内存
    • 1.2.1 通过VM Args:-xms512m -Xmx512m -XX:+HeapDumpOnOutofMemoryError -Xmn100m -XX:SurvivorRatio=8 设置初始堆内存、最大堆内存、内存异常打印dump、新生代内存、新生代内存分配比例(8:1:1),因为Heap分为新生代跟老年代,所以512M-100M=412M,老年代就是412M(初始内存跟最大内存最好相等,防止内存不够时扩充内存或者Full GC,导致性能降低)
    • 2 Graphs区域:内存使用详细介绍
    • 2.1 Compile Time(编译时间):6368compiles 表示编译总数,4.407s表示编译累计时间。一个脉冲表示一次JIT编译,窄脉冲表示持续时间短,宽脉冲表示持续时间长。
    • 2.2 Class Loader Time(类加载时间): 20869loaded表示加载类数量, 139 unloaded表示卸载的类数量,40.630s表示类加载花费的时间
    • 2.3 GC Time(GC Time):2392collections表示垃圾收集的总次数,37.454s表示垃圾收集花费的时间,last cause表示最近垃圾收集的原因
    • 2.4 Eden Space(Eden 区):括号内的31.500M表示最大容量,9.750M表示当前容量,后面的4.362M表示当前使用情况,2313collections表示垃圾收集次数,8.458s表示垃圾收集花费时间
    • 2.5 Survivor 0/Survivor 1(S0和S1区):括号内的3.938M表示最大容量,1.188M表示当前容量,之后的值是当前使用情况
    • 2.6 Old Gen(老年代):括号内的472.625M表示最大容量,145.031M表示当前容量,之后的87.031表示当前使用情况,79collections表示垃圾收集次数 ,28.996s表示垃圾收集花费时间
    • 2.7 Perm Gen(永久代):括号内的256.000M表示最大容量,105.250M表示当前容量,之后的105.032M表示当前使用情况
    • 3 Histogram区域:survivor区域参数跟年龄柱状图
    • 3.1 Tenuring Threshold:表示新生代年龄大于当前值则进入老年代
    • 3.2 Max Tenuring Threshold:表示新生代最大年龄值。
    • 3.3 Tenuring Threshold与Max Tenuring Threshold区别:Max Tenuring Threshold是一个最大限定,所有的新生代年龄都不能超过当前值,而Tenuring Threshold是个动态计算出来的临时值,一般情况与Max Tenuring Threshold相等,如果在Suivivor空间中,相同年龄所有对象大小的总和大于Survivor空间的一半,则年龄大于或者等于该年龄的对象就都可以直接进入老年代(如果计算出来年龄段是5,则Tenuring Threshold=5,age>=5的Suivivor对象都符合要求),它才是新生代是否进入老年代判断的依据。
    • 3.4 Desired Survivor Size:Survivor空间大小验证阙值(默认是survivor空间的一半),用于Tenuring Threshold判断对象是否提前进入老年代。
    • 3.5 Current Survivor Size:当前survivor空间大小
    • 3.6 histogram柱状图:表示年龄段对象的存储柱状图
    • 3.7 如果显示指定-XX:+UseParallelGC --新生代并行、老年代串行收集器 ,则histogram柱状图不支持当前收集器
    • 根据数据表现进行相应参数调优。创造优质代码是没办法速成的,只有通过不断学习,慢慢打打磨自己的技能。
    展开全文
  • vue+webpack项目优化

    千次阅读 2018-01-18 18:20:38
    vue+webpack项目优化 阅读下文之前,我已经假设你有了良好的webpack以及vue2.x基础,并且可以独立使用脚手架搭建一套SPA项目。vue项目优化的着手点主要涵盖以下几个方面: 打包优化 异步加载 页面切换时加loading...

    vue+webpack项目优化

    阅读下文之前,我已经假设你有了良好的webpack以及vue2.x基础,并且可以独立使用脚手架搭建一套SPA项目。vue项目优化的着手点主要涵盖以下几个方面:

    • 打包优化
    • 异步加载
    • 页面切换时加loading特效
    • 点击延迟
    • inline manifest
    • 逻辑代码优化

    一、打包优化

    方法为:在webpack的公共配置文件(一般为webpack.base.conf.js)的resolve下有extensions选项。数组中加入不需要打包的组件,并且在入口的html中使用cdn的方式引入即可,此时会发现打包出来的vender包会变小很多。我自己的示例为:

    二、异步加载

    所谓的异步加载组件,其实就是组件懒加载。可以理解为:当我需要使用组件的时候才进行加载。主要包含两部分:路由配置和子组件的调用。

    • 路由配置

    我们可以在router里使用如下写法来实现懒加载:

    {
        path: '/portal/:system/home', //用户登入后的app首页
        component: (resolve) => require(['@/page/home'], resolve)
     }

    说明:“@”指向项目根目录,“home”是路由所对应的组件。

    • 子组件调用
      通常的写法是,在父组件中import组件,随后在父组件的components中注册子组件后使用子组件,比较消耗性能。我推荐使用异步的方法使用子组件 ——直接在components中导入子组件,需要的时候才加载它:
    components: {
      selfProfile: () => import("@/components/profile")
    }

    三、页面切换时加loading特效

    页面的响应、渲染速度的影响原因多种多样。为了解决用户在首次进入应用或者页面切换的时等待的白屏时间较长时,可以使用vue-router提供的beforeEach()和afterEach()方法。所以使用loading进度条是一种比较明智的做法。我在项目中使用了nprogress。API可参考官方文档,使用方法如下(假设你已经安装好了nprogress):

    在router.js中使用import引入nprogress以及它的样式表,配置ngprocess。并在路由配置完成后,调用beforeEach() 和 afterEach方法

    //路由配置前
    NProgress.configure({ showSpinner: false })
    
    //此处为路由配置列表,可参考上面的异步加载方式进行编写
    
    //路由配置后
    router.beforeEach(function (to, from, next) {
      NProgress.start() //开始loading
      const toIndex = history.getItem(to.path)
      const fromIndex = history.getItem(from.path)
    
      if (toIndex) {
        if (!fromIndex || parseInt(toIndex, 10) > parseInt(fromIndex, 10) || (toIndex === '0' && fromIndex === '0')) {
          store.commit('UPDATE_DIRECTION', {direction: 'forward'})
        } else {
          // 判断是否是ios左滑返回
          if (!isPush && (Date.now() - endTime) < 377) {
            store.commit('UPDATE_DIRECTION', {direction: ''})
          } else {
            store.commit('UPDATE_DIRECTION', { direction: 'reverse' })
          }
        }
      } else {
        ++historyCount
        history.setItem('count', historyCount)
        to.path !== '/' && history.setItem(to.path, historyCount)
        store.commit('UPDATE_DIRECTION', {direction: 'forward'})
      }
    
      if (/\/http/.test(to.path)) {
        let url = to.path.split('http')[1]
        window.location.href = `http${url}`
      } else {
        next()
      }
    })
    
    router.afterEach(function (to) {
      NProgress.done() //loading结束
    })

    四、点击延迟

    安装fastclick后,在main.js中引入即可:

    import FastClick from 'fastclick'
    FastClick.attach(document.body)

    五、inline manifest

    manifest文件时路径配置和异步组件名字列表,这么做可以减少一个http请求。具体做法为,先在入口页面index.html中的head的最后一行加入代码

    <%=htmlWebpackPlugin.files.webpackManifest%>

    最后在webpack的公共配置文件(我的是webpack.base.conf.js)的vux-loader配置的 plugins 列表中加入inline-manifest插件:

    module.exports = vuxLoader.merge(webpackConfig, {
      plugins: ['inline-manifest', 'vux-ui', 'progress-bar', 'duplicate-style']
    })

    六、逻辑代码优化

    这部分的建议就是:①每个vue文件尽可能小(多使用组件,加强可复用性);②vue指令中的v-show和v-if的使用:v-if耗性能更多,所以频繁切换的使用 v-show,不频繁切换的使用 v-if;③vue指令中的v-for搭配:key使用,确保唯一性;④样式表css务必加scoped以防止干扰。。。。

    若有不妥之处,请大家指正。


    展开全文
  • 为什么需要项目优化 在互联网快速发展的今天,在实现完功能之后,项目优化是一个被经常提到的话题。很多项目会在开发排期中留大量时间去做一轮又一轮的性能优化,就是为了让页面尽可能早的到达用户,提高交互的流畅...

    为什么需要项目优化

    在互联网快速发展的今天,在实现完功能之后,项目优化是一个被经常提到的话题。很多项目会在开发排期中留大量时间去做一轮又一轮的性能优化,就是为了让页面尽可能早的到达用户,提高交互的流畅程度。

    在系统可利用系统资源有限的大背景下,3秒呈现内容的原则下,项目优化显得格外重要。

    每减少0.1秒加载速度可能会给你带来几百甚至几千的用户活跃;每减少100K的内容请求可能会给你带来几千甚至几万的的服务端费用;每提高10%的交互流畅度可能给你带来几万甚至几十万的销售额。

    于情于理,我们都需要去了解,掌握和使用网站优化这项必备技能。

    雅虎的网站优化准则

    由之前的十四条增加到三十五条,划分为七个模块:Content,Server,Cookie,Css,Javascript,Images,Mobile
    雅虎优化准则详情链接:https://blog.csdn.net/weixin_44369568/article/details/91350266

    常见优化方法

    从资源请求数量+代码执行效率两个角度来考虑

    DOM结构

    样式表放在头部,防止白屏和闪屏
    JS脚本放在底部或异步获取,防止阻塞资源加载
    使用语义化标签,优化精简DOM结构
    减少DOM操作频率
    减少重绘与回流
    

    JS脚本

    优化脚本结构,移除重复的脚本
    模块就近加载(CMD)
    按需加载加载组件和路由
    图片懒加载,列表分页
    使用节流与防抖减少事件触发频率
    尽量使用CSS动画代替js动画,开启硬件加速
    

    资源打包上线

    使用打包构建工具(webpack)清除注释,压缩页面资源,js、css、html、图片、字体等等
    混淆js代码
    分离非业务逻辑相关vendor依赖,使用长缓存缓存和CDN分发网络
    

    服务器优化

    减少Http请求,合并页面资源,js,css单一入口。js特殊可以分为两个文件,一个业务逻辑,一个非业务逻辑
    把小图标合成雪碧图,不太适用经常更新的移动端开发
    把小的图片,字体等资源base64化
    开启GZip压缩,减少资源传输大小
    使用强缓存和协商缓存,减少资源重复请求
    

    Vue中可以优化的点

    Vue库dist里面的Runtime-only比Runtime+Compiler小30%
    Vue的计算属性会根据依赖的data进行缓存
    keep-alive可以缓存常用组件
    Vuex中的getter也会根据依赖的state进行缓存
    v-for中唯一key的使用
    Vue全局错误处理errorHandle
    Vue路由懒加载
    Vue组件动态加载
    

    React中可以优化的点

    在constructor改变this指向代替箭头函数和render内绑定this,避免函数作为props带来不必要的rerender
    shouldComponentUpdate,减少不不必要的rerender
    PureComponent高性能组件只响应引用数据的深拷贝
    使用唯一key优化list diff
    合并setState操作,减少虚拟dom对比频率
    React路由动态加载react-loadable
    
    展开全文
  • SpringBoot项目优化和Jvm调优

    千次阅读 2019-04-23 17:01:25
    SpringBoot项目优化和Jvm调优(楼主亲测,真实有效) 转自:https://blog.csdn.net/wd2014610/article/details/82182617 项目调优 作为一名工程师,项目调优这事,是必须得熟练掌握的事情。 在SpringBoot项目中,...

    SpringBoot项目优化和Jvm调优(楼主亲测,真实有效)

    转自: https://blog.csdn.net/wd2014610/article/details/82182617

    项目调优

    作为一名工程师,项目调优这事,是必须得熟练掌握的事情。 
    在SpringBoot项目中,调优主要通过配置文件和配置JVM的参数的方式进行。 
    在这边有一篇比较好的文章,推荐给大家! 
    SpringBoot项目配置Tomcat和JVM参数 

    一、修改配置文件

    关于修改配置文件application.properties。 
    SpringBoot项目详细的配置文件修改文档

    其中比较重要的有:

    server.tomcat.max-connections=0 # Maximum number of connections that the server accepts and processes at any given time.
    server.tomcat.max-http-header-size=0 # Maximum size, in bytes, of the HTTP message header.
    server.tomcat.max-http-post-size=0 # Maximum size, in bytes, of the HTTP post content.
    server.tomcat.max-threads=0 # Maximum number of worker threads.
    server.tomcat.min-spare-threads=0 # Minimum number of worker threads.
    • 1
    • 2
    • 3
    • 4
    • 5

    二、Jvm调优

    关于Jvm调优Oracle官网有一份指导说明: 
    Oracle官网对Jvm调优的说明 
    有兴趣大家可以去看看。

    三、Jvm调优实战

    1、未设置JVM参数的情况

    我现在有一个项目,默认情况下,没有设置任何Jvm参数。 
    下面我来启动看一下。

    这里写图片描述

    看一下堆栈分配: 
    很明显默认的最大堆内存分配了8个G。很明显的不合理嘛。

    这里写图片描述

    2、下面我们来设置下Jvm参数

    例如要配置JVM这么一大段参数:

    -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC
    • 1

    方式一: 
    如果你用的是IDEA等开发工具,来启动运行项目,那么要调试JDK就方便太多了。 
    只需要将参数值设置到VM options中即可。

    这里写图片描述

    设置成功,我的GC日志和堆栈分配都已经OK了。

    GC日志:

    这里写图片描述

    堆栈分配:

    这里写图片描述

    方式二: 
    适用于在项目部署后,在启动的时候,采用脚本或者命令行运行的时候设置。

    先在项目路径下,给项目打包: 
    清理就项目

    mvn clean
    • 1

    这里写图片描述

    打包新项目:

     mvn package -Dmaven.test.skip=true
    • 1

    打包完成后进入可运行Jar包的路径下:

    这里写图片描述

    执行启动设置Jvm参数的操作。

    $ java -jar -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=128m -Xms1024m -Xmx1024m -Xmn256m -Xss256k -XX:SurvivorRatio=8 -XX:+UseConcMarkSweepGC newframe-1.0.0.jar
    • 1

    这个时候,你再看监控,你就会发现,已经是Ok的了。 
    堆栈都是按照启动时候,设置的Jvm参数启动的。

    这里写图片描述

    关于这些设置的JVM参数是什么意思,请参考第二步中的oracle官方给出的调优文档。

    我在这边简单说一下:

    -XX:MetaspaceSize=128m (元空间默认大小) 
    -XX:MaxMetaspaceSize=128m (元空间最大大小) 
    -Xms1024m (堆最大大小) 
    -Xmx1024m (堆默认大小) 
    -Xmn256m (新生代大小) 
    -Xss256k (棧最大深度大小) 
    -XX:SurvivorRatio=8 (新生代分区比例 8:2) 
    -XX:+UseConcMarkSweepGC (指定使用的垃圾收集器,这里使用CMS收集器) 
    -XX:+PrintGCDetails (打印详细的GC日志)

    知识点:

    JDK8之后把-XX:PermSize 和 -XX:MaxPermGen移除了,取而代之的是 
    -XX:MetaspaceSize=128m (元空间默认大小) 
    -XX:MaxMetaspaceSize=128m (元空间最大大小) 
    JDK 8开始把类的元数据放到本地化的堆内存(native heap)中,这一块区域就叫Metaspace,中文名叫元空间。 
    使用本地化的内存有什么好处呢?最直接的表现就是java.lang.OutOfMemoryError: PermGen 空间问题将不复存在,因为默认的类的元数据分配只受本地内存大小的限制,也就是说本地内存剩余多少,理论上Metaspace就可以有多大(貌似容量还与操作系统的虚拟内存有关?这里不太清楚),这解决了空间不足的问题。不过,让Metaspace变得无限大显然是不现实的,因此我们也要限制Metaspace的大小:使用-XX:MaxMetaspaceSize参数来指定Metaspace区域的大小。JVM默认在运行时根据需要动态地设置MaxMetaspaceSize的大小。

    好啦,祝大家学习和工作顺利啦!

    • rrr9805

      JonathanHsia: "-Xms1024m (堆最大大小) -Xmx1024m (堆默认大小) "这个说反了(3周前#8楼)

    展开全文
  • vue项目优化

    千次阅读 2020-10-15 18:13:26
    一、代码优化 1. 使用keep-alive缓存不活动的组件 keep-alive是一个抽象组件:它自身不会渲染一个DOM元素,也不会出现在父组件链中;使用keep-alive包裹动态组件时,会缓存不活动的组件实例,而不是销毁它们。 在...
  • 考试系统项目优化心得

    千次阅读 热门讨论 2014-02-26 17:26:03
    项目开发也好,项目优化也罢,都要本着一种主动学习的态度去对待。你付出的越多,收获的也就越多。其次,不要总认为U层的优化没有什么用途,工作以后,没有这方面的经验,你照样做不来!最后,开始任务之前,宏观...
  • JAVA项目优化(1)

    2018-03-30 11:10:58
    项目优化,主要就是提高项目的运行速度。首先我们先讲一个关于类型转换方面的问题String是我们常用的类型,其它类型的数据转换成String的三种常用方法:1.data.toString()2.String.valueOf(data)3.data+""...
  • 项目优化总结

    千次阅读 2016-11-23 17:02:05
    最近一个多月算是比较忙的,但是具体忙了什么却不太好说清楚,主要是因为做的事比较繁琐还不太容易量化,说简单点,就是和组内其他几个同事一起接手一个算是开发好的项目,并进行一定的优化。 说到这个项目,就需要...
  • vue单页面应用项目优化总结

    千次阅读 2018-08-21 15:08:07
    这是之前在公司oa项目优化时罗列的优化点,基本都已经完成,当时花了点心思整理的,保存在这里,方便以后其他项目用到查漏补缺。 1、打包文件中的app.js文件放入cdn,加快页面首次加载速度  2、提取公共方法,减少...
  • 项目优化 添加进度条 nprogress 进度条官方文档传送门 打开vue-ui面板,选择依赖,输入nprogress进行安装相关依赖。 npm Javascript npm install --save nprogress 在main.js入口文件中,进行...
  • 前端项目优化

    千次阅读 2018-09-25 09:26:00
    经常会被问到这个问题,所以记录一下: ...2.合理使用浏览器缓存 3.使用压缩,尽可能的将外部的脚本、样式进行合并,多个合为一个,之前看的jquery.mini和普通版就是很好的例子 4.CDN加速,本质仍然是一个缓存,而且将...
  • 五、项目优化相关 1.日常项目中,如果你接手,你准备从哪些方面调优? 答:这个呢首先是了解哪些需要优化,需要优化肯定是项目性能遭遇瓶颈或者猜测即将遭遇了,我们才会去考虑优化。那么怎么优化? a、扩容,扩...
  • vue发布项目优化

    千次阅读 2020-05-25 15:57:44
    发布环境去掉开发环境中的console.*的代码 1、安装 babel-plugin-transform-remove-console插件(babel-plugin-transform-remove-console) npm install babel-plugin-transform-remove-console --save-dev ...
  • 浅谈 Vue 项目优化

    万次阅读 2017-06-20 09:37:04
    前几天看到大家说 vue 项目越大越难优化,带来很多痛苦,这是避免不了的,问题终究要解决,框架的性能是没有问题的,各大测试网站都有相关数据。下面进入正题 基础优化 所谓的基础优化是任何 web 项目都要做的...
  • Java 项目优化实战

    2016-09-25 16:33:54
    1 Visual VM 2 优化一 2.1 背景 2.2 原实现 2.3 剖析 2.3 方案 2.4 核心代码 3 优化二 3.1 背景 3.2 原实现 3.3 剖析 3.4 方案 & 代码 ...项目
  • vue-cli项目优化,缩短首屏加载时间

    千次阅读 2018-01-22 18:07:20
    最近实习的项目需求上要求不多,就学了下项目优化,主要是首屏加载太慢。 大文件定位 我们可以使用webpack可视化插件Webpack Bundle Analyzer 查看工程js文件大小,然后有目的的解决过大的js文件。 安装 npm ...
  • 记录:Vue移动端项目优化过程

    千次阅读 多人点赞 2020-03-13 18:35:08
    最近在做项目时,测试提出了在App端的H5项目入口加载时间过长,白屏等待过久,需要优化的问题,于是着手开始分析: 项目技术栈:基于Vue全家桶做的一个移动端类似WebApp的项目,使用到的第三方库有:mint-ui, ...
  • 老司机谈APK瘦身套路-项目优化

    千次阅读 2016-06-27 08:58:42
    在上一篇文章中,老司机带领大家一起学习了图片资源的瘦身套路,收到了很... 这次,老司机继续开车,给大家分享APK瘦身套路之项目优化篇。为了更好的跟大家说明瘦身套路,我把优化分为项目结构瘦身和代码瘦身两部分。
  • SpringBoot项目优化和Jvm调优(楼主亲测,真实有效)

    万次阅读 多人点赞 2018-08-29 14:24:13
    项目调优 作为一名工程师,项目调优这事,是必须得熟练掌握的事情。 在SpringBoot项目中,调优主要通过配置文件和配置JVM的参数的方式进行。 在这边有一篇比较好的文章,推荐给大家! SpringBoot项目配置Tomcat...
  • 项目优化方案

    千次阅读 2012-12-29 10:00:43
    1.程序开发优化 1.循代码编写约定及规范 1.2基础代码优化 1.2.1字符串优化 1.2.1.1使用StringBuffter代替String 例如: String s ="a"+"b"+"c"+"d"+"..."; 替换为: StringBuffer sb= new ...
  • VUE项目优化请君收藏!

    千次阅读 2020-05-21 09:02:54
    相信现在很多人都是用Vue做过了各种项目,但是项目代码做完和上线并不代表这结束,还有上线以后的优化也是很重要的一点,这次的博客就来给大家说一下如何优化一下Vue的项目,让你的项目打包和运行速度更上一个台阶...
  • 快来一起探索如何打脸我们的破项目,兄弟姐妹们把害怕打在公屏上!
  • 项目优化+上线(掌握了么?)

    千次阅读 2020-07-10 18:21:53
    目标 了解vue项目优化过程 能够将web项目部署到服务器
  • 个人经验,总结一下项目优化方案,欢迎大神交流指正补充 (一)简单的代码优化,包括不用GetChild(),减少遍历次数,减少代码冗余,这些大家都知道的 (二)预制体预加载,也就是在加载场景时,加载所有用到的预制体,当然,...
  • mr项目优化总结

    千次阅读 2016-08-25 10:58:14
    Hadoop优化 第一篇 : HDFS/MapReduce MapReduce相关参数 MapReduce官方文档 以上三篇可以作为内部调优的参考,但是个人感觉,参数调优适用于平台内部调优,如果对mr没有深层次的了解,盲目调节,反而适得其反 ...
  • 文章目录1、引言2、介绍项目优化的策略3、优化——通过nprogress添加进度条效果4、优化——解决serve命令中提示的ESLint语法错误5、优化——在执行build命令期间移除所有的console6、优化——只在发布阶段移除所有的...
  • 引言 通过前面的七篇博客,我把自己在项目优化过程的经验进行了分享,今天这篇博客,作为一个总结,就来讲讲作为一个TeamLeader,在项目管理中遇到的问题和解决经验!正文 问题一:团队之间怎么沟通? 一个好的...
  • 项目后期开发中的项目优化

    千次阅读 2013-12-04 21:57:34
    本次的性能优化主要是针对windows平台开展优化。 建议:如果系统可以替换成64位的系统,最好安装64位系统。这样可以避免jdk在32位条件下的内存使用限制。 2. 系统运行环境 2.1. 应用系统环境 应用系统环境是指...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 51,313
精华内容 20,525
关键字:

项目优化