热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

一次性能优化引发的思考

软件性能是软件产品的一个非功能特性,是软件产品考量的一个重要指标,软件性能指标关注的不是是否能够完成平台特定的功能,而是完成同样的功能时对用户而言显示数据、页面

软件性能是软件产品的一个非功能特性,是软件产品考量的一个重要指标,软件性能指标关注的不是是否能够完成平台特定的功能,而是完成同样的功能时对用户而言显示数据、页面、功能操作的及时性。影响软件性能的核心要素分为几个层面,当前软件所部署的硬件环境、网络、CPU系统的吞吐量,而在性能调优的本质上是对于IO数量、数据库连接数、JVM性能、系统参数等几个层面的调整、优化、适配。

无论是软件性能调整或是了解、学习、掌握新知识的过程中都不要浮于表面,需要从原理、底层方面掌握、运用,同时在工作过程中面对问题需要及时反馈做到“凡事有交代、件件有着落、事事有回应”。

性能优化

软件平台除本身在代码逻辑处理上的优化外,如:缓存机制、减少数据库访问交互次数、逻辑公有化处理等。也可以通过支撑运行的Server端进行参数调整增加平台运行的性能比重。典型性能优化的几种方式:

调整JVM/IO:通常在对应Server中的启动文件中添加JVM参数,设置对应参数,如:

-server:一定要作为第一个参数,在多个CPU时性能佳

-Xms:初始大小,使用的最小内存,CPU性能高时此值应设的大一些

-Xmx:最大值,使用的最大内存

-XX:PermSize:设定内存的永久保存区域

-XX:MaxPermSize:设定最大内存的永久保存区域

调整数据库连接:通过设置数据库连接最大个数来匹配性能上的优化,如:

maxIdle:最大等待连接中的数量,设置为0没有限制

maxWait:建立最大连接等待时间,单位为 ms。如果超过此时间将接到异常。设为-1表示无限制。

maxActive:最大连接数据库连接数,设 0 为没有限制

maximumConnectionCount:最大连接数

minimumConnectionCount:最小连接数

扩大系统参数:增加所部署环境硬件服务器的性能参数,保证平台部署环境性能的稳定性。

集群模式扩展:通过平台内置或结合第三方的方式解决因单台服务器性能不能满足或因故障造成服务器停机情况所影响客户业务正常使用带来的不必要影响。

解决与推进

各行各业的工作过程中不可避免会涉及到超出当前工作能力范畴的工作事宜,在处理这类问题的过程中不能盲目开展,需要有条理、有思路、有计划稳步推进。同时在解决问题的过程中尝试从原理出发,不要“死记硬背、浮于表面”,解决一个问题的同时多想想、多问问、扩散思维、打开格局,从多方面、多维度、多层次上积累自身的知识收获,提升个人的技能。

1原理掌握

无论是在学习、工作、解决问题的过程中,均需要从问题的本质出发,掌握问题的本质原理,解决问题的方式、方法,而不是仅仅了解问题是否解决。如:在性能优化的过程中需要掌握可以调整的性能优化的方式(JVM、数据库连接、系统参数等)而不是去死记硬背XX目录的XX文件添加XX配置信息。


通过问题解决的原理性掌握实现在类似问题解决过程中的延展性,实现举一反三,解决问题的过程中原理互通,在底层原理的基础上不断衍变出表象问题的解决方案,从而做到稳扎稳打,深入浅出,解决问题得心应手。

2扩散思维

扩散思维与原理掌握是相辅相成的过程,在解决问题的过程中不能自我封闭,这样很容易将问题局限化。工作中不能做“人活着、脑已死”、“不能用身体的忙碌去掩盖思想的懒惰”。更多时候如果能够把问题描述清楚,那么问题就已经解决一半,遇见问题不要停留在问题表面上,扩散思维从不同的角度思考问题,摆脱僵化的思维框架,将思维变通,借助横向类比、跨域转化、触类旁通,沿着不同的方向扩散。


比如:调整未知产品性能优化的过程中不要等着其他人告诉自己一步就解决一步,想着按部就班的完成这个事情,而是要思考如何去解决、如何去完成,具体解决问题的思路和原理是什么,在以前类似性能优化的过程中可以通过哪些方式、方法,什么样的方式最有效、最高效,从而更好、更全面的找到解决问题的最优方案。

3知识积累

发现问题、制定方案、解决问题整体过程中,能够了解、吸收、掌握、积累更多的知识点,由点至线,由线连接成面,不积跬步无以至千里,不积小流无以成江海,只有量的积累才能达成质的飞跃。通过解决问题进行知识积累是知识获取的一种驱动因素,在工作过程中自己专攻的领域主动获取相关的知识积累,常见获取知识的方法如下:


快速看相关查:结合所面临的问题快速查询、检索相关知识点,迅速了解解决问题过程中可能涉及的解决方式,同时不断深入延展,由一个知识点延展至一个知识面,形成自身的知识积累;


谋定后动计划先行:不要盲目的开始,工作开始之前要有计划有依据,需要协调资源的要提前申请/告知被协调人,切记为开始而开始,盲目开展反复修改,这样反而更浪费时间,消耗工作的热情;


PDCA原则:Plan(计划)Do(做)Check(检查)Action(调整),工作过程中有计划,遵循计划,检查工作,结合实际情况调整工作模式不断完善至解决问题,过程中总结知识形成自身的知识链。

4技能提升

每个人在不同阶段接触超出能力范围内的事情或多或少都会有些无所适从,不了解如何着手解决。工作中遇到挫折的同时也是自身能力提升的机会,这时一定要放平心态,自身不要慌乱,努力去寻找解决问题的方法,付出一定会有收获,同时可以请教他人,协调资源,学习他们的工作方式、解决问题的方法,对自身的能力提升会有很大的帮助,比如:


学习能力提升:工作过程中不断学习、理解、总结新的知识,开阔思维提升能力,如果一个人停滞不前终究会被社会所淘汰,学习、记录、积累、提升,积少成多、积水成河,每天进步一点日积月累便会成绩斐然。


知识技能提升:在学习知识的同时需要扩充自身的知识面,形成知识体系,理性了解自身的真实能力,了解自身的优缺点,不断的改变、提升,从而丰富自身的能力模型。


沟通能力提升:解决问题的过程中不断与同事、领导、伙伴进行沟通、确认,掌握面向不同角色人员在沟通时需要注意的事项。


工作效率提升:对工作能够主动积极应对而不是被动接受,对于工作积极思考,明确解决方式、方法,提高自身的工作效率,从而形成良性循环。

汇报与反馈

工作过程中需要明确汇报本身就是工作的一部分,是信息共享的主要途径,面对可汇报可不汇报的工作一定要汇报,不能够仅闷头做事造成信息闭塞。当面对问题时不能因为害怕领导的批评而逃避汇报,积极的汇报能够保证工作不偏离方向,通常领导不会因为反馈问题而指责汇报人能力不行,而是会结合自身的经验更好、更快、更有效的协助解决问题。

1直面问题

遇见问题,直面问题勇于担当,不要推诿,面对当前工作任务不逃避、不绕开,面对问题与问题“打交道”,剥离事物的表面现象通过本质解决问题,比如:与客户沟通的过程中,客户反馈平台使用繁琐,可能本质上是因为培训没有详细、到位,客户不理解平台内部操作逻辑;项目调研过程中客户关心整合落地,实际是想要了解结合企业目前的现状能做哪些事情,是否能够做到,其他类似企业是如何构建的。


工作过程中所遇到的问题(无论是业务范畴或是技术难点)不要选择逃避,逃避不能解决问题,需要直面问题,提升自身的信心,明确问题的关键点,抓住问题、剖析问题、解决问题、累积经验、丰富阅历、提升自我。

2暴露问题

在项目实施过程中无论是遇见技术坎坷或是暴露出的自身能力问题都不能选择“视而不见、回避问题”,把问题明确出来是为了采取更有效的应对措施。自己不能解决的问题,可以协调资源,不能让问题发酵,造成不必要的影响。


人性本身往往趋利避害,问题不暴露、不解决,问题本身并不会消失,不要因为害怕批评而不暴露问题、掩盖问题。工作中所遇见的问题对于自身而言本质上是一次能力提升的机会,我们应该遇见问题、解决问题、领导认可、能力提升,逐步走向正循环,而不是逃避、推诿、掩盖、忽视问题,这样无论是对个人还是企业得到的均是负面影响。


暴露问题、罗列问题、分析问题、解决问题,在遇见问题时首先正视问题,列出问题,分析产生问题的原因,解决问题的方式方法,跟进问题解决的进度,如:

工作计划没有按时完成,什么原因造成的没有按时完成?

系统协调时间过长;自身能力不足影响工作进度;工作计划划分不合理造成拖期。

面对问题如何解决,保证工作进度的推进?

寻找甲方工作人员共同推动,明确问题拖期的原因;协调其他资源,“笨鸟先飞”努力提升自身能力模型;合理划分工作计划,保证进度的推进。

提出解决方案后,持续跟进问题解决的效果。

持续跟进系统对接的情况;累积、总结、学习提升能力模型,保证问题最终被解决,获得认可。

3积极汇报

领导每天的工作非常繁杂,作为员工应做到“凡事有交代、件件有着落、事事有回应”尤其当前问题领导已经知晓且过问,积极汇报能够让领导实时掌握工作的进展,把握汇报的时机,注意汇报的方式,突出重点,表达观点,紧扣要点。


把握汇报时机:正确的时间做正确的事情,工作开展前优先与领导汇报沟通当前时间开展是否合适,预计投入的成本(时间、人力);工作过程中与领导汇报工作进展情况,是否有跑偏的情况;工作中出现问题需要及时暴露、反馈,制定问题的解决方案;需要做出决策时工作完成后及时汇报,保证领导对工作的实时掌握。


突出汇报重点:在与领导进行工作汇报时需要言简意赅、条理清晰、直奔主题,减少过程的汇报重点汇报结果,因为领导更关心的事情结果。汇报过程中以1、2、3的模式进行汇报避免表达无序,语言组织混乱的情况影响汇报效果。


汇报态度端正:汇报的本质是信息对称解决问题,汇报过程中要客观表达需要汇报的内容,不要添加个人的感情色彩,明确需要汇报的内容,以解决问题的姿态去汇报,而不是相互推诿、互相诋毁。

反思与思考

工作过程中遇见问题对于个人而言本身是一次能力提升的机会,解决问题的过程中不要仅仅停留在问题的表面,需要进行深入思考,了解问题的本质,过程中记录总结、分析,便于后续工作人员借鉴参考,解决问题后需要对问题解决方式进行总结,总结自身的不足及过程中学习、掌握的能力,后续不断巩固,固化为自身的能力模型。

1浮于表面

工作过程中不是装模作样、弄虚作假而是需要真实落地,注重落实,不要“浮”于表面。在一盘散沙上注定不能建设高楼大厦,根基不稳建筑越高越危险,装饰的再华丽也是“空中楼阁”。


有目标有计划:清晰的目标和可行的计划是提升工作效率、落实完成工作的重要保障。跟进工作过程中制定明确目标,落实工作计划,保证目标达成。


有方法固根本:做工作要讲求方式方法,而不是用“身体的忙碌换取头脑的懒惰”,采取有效的工作方式,合理的工作方法稳扎稳打,夯实自身的基本功,充实能力模型,可以达到事半功倍的效果。

2深度思考

机械重复是无意义的忙碌,勤奋指的是头脑的努力而不是身体的疲劳,单纯依赖身体的忙碌最终成为的是“人手”而不是企业所需要的“人才”。只有通过深度思考,学会刨根问底才能够找到最恰当的办法解决问题。问题之所以产生就一定有产生的原因,很多问题都是隐藏在表面现象之下,在工作过程中想要解决问题必须要深度思考,透过现象直击本质,在解决问题过程中深思考、多摸索、勤总结、时归纳,掌握问题的本质、保证后续即使表现不同的问题也能透过表面在本质上解决问题。


解决问题的过程中采用5W2H的方法对自己多发问,问题的本质是什么,问题产生的原因是什么,问题会带来什么影响,问题的解决方案是什么。客观分析问题,注重问题的逻辑及条理,结合身边的资源快速应对解决问题,积累自身,掌握解决问题的方式与方法,养成深度思考的习惯。

3总结回顾

“博学之,审问之,慎思之,明辨之,笃行之”意思要是广博的学习,要对问题详细的询问,要慎重的思考,要明白的辨别,要切实的力行。总结问题的过程中多为自己提问题,深度挖掘问题的本质,记录问题的解决方案后定期回顾。定期回顾是能力提升的重中之重,即使有积极的心态、清晰的思路、良好的沟通、快速学习的能力,但问题解决后不总结、不回顾会将前面付出的努力付之一炬。多总结,勤回顾,先固化,再优化,将问题变为知识点,由掌握知识点累积为知识面、知识链,由掌握知识到运用知识,把运用知识变成下意识。


往期精选
  • 地产行业信息化建设思考

  • 项目总监岗位职责与思考

  • 一个“返回”按钮引发的思考

  • 地产行业主数据建设项目思考



推荐阅读
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • 本文介绍了解决Netty拆包粘包问题的一种方法——使用特殊结束符。在通讯过程中,客户端和服务器协商定义一个特殊的分隔符号,只要没有发送分隔符号,就代表一条数据没有结束。文章还提供了服务端的示例代码。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • CentOS 7部署KVM虚拟化环境之一架构介绍
    本文介绍了CentOS 7部署KVM虚拟化环境的架构,详细解释了虚拟化技术的概念和原理,包括全虚拟化和半虚拟化。同时介绍了虚拟机的概念和虚拟化软件的作用。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文介绍了操作系统的定义和功能,包括操作系统的本质、用户界面以及系统调用的分类。同时还介绍了进程和线程的区别,包括进程和线程的定义和作用。 ... [详细]
  • Java 11相对于Java 8,OptaPlanner性能提升有多大?
    本文通过基准测试比较了Java 11和Java 8对OptaPlanner的性能提升。测试结果表明,在相同的硬件环境下,Java 11相对于Java 8在垃圾回收方面表现更好,从而提升了OptaPlanner的性能。 ... [详细]
  • http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
author-avatar
皓月当空668
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有