我被要求缩短长启动应用程序的启动时间,但是我还要向我的经理们强制要求我减少启动的时间 - 例如10-20秒。
由于我是公司的新成员,我说我可以用几个月的时间表(它是一个大服务器,我是新的,我计划进行延迟加载+性能调整)。
答案未被接受我被要求做某种缓存以将重要数据保存在另一台服务器中,然后当我的服务器启动时它会从该缓存中获取所有数据 - 我觉得这是一种解决方法我真的不喜欢它。 你喜欢吗?
你认为我应该怎么做?
PS,当我分析应用程序时,我看到许多小问题使启动时间很长(比如2分钟),这不是一个简短的过程来修复所有问题并使延迟加载。
任何建议都会有所帮助。
语言是Java。
由于
答案 0 :(得分:5)
性能优化的第一条:测量它。得到硬数据。在优化的每个阶段,测量性能增益/损失/缺乏变化。在您尝试并测量特定优化之前,您(以及您的经理)无法表示特定优化将会或不会起作用。你可以随时要求测试&在实施之前测量解决方案。
性能优化的第二条(或任何真正的):选择你的战斗。请记住,您的经理可能对相关系统非常有经验,并且可能已经知道正确的解决方案;也可能涉及其他事情(政治),所以在这一点上不要把头寸置于危险之中。
答案 1 :(得分:0)
我同意MatthieuF。最重要的是测量它。然后,您需要分析测量结果,以查看哪些部件成本最高,以及哪些资源(内存,CPU,网络等)是瓶颈。
如果你知道这些答案,你可以提出解决方案。您可以创建解决方案的小测试(概念证明),以便您可以尽早向经理报告。
可以有各种解决方案,例如购买更多硬件可能是最好的方法。购买更多硬件也可能没有结果,您需要进行修改。修改可以是优化软件,数据库或其他软件。可能是选择更好的算法,引入缓存(以更多内存使用为代价)或引入多线程以利用多个CPU内核。您还可以对应用程序的“环境”进行修改,例如操作系统的配置/版本,Java虚拟机,应用程序服务器,数据库服务器等。所有这些组件都有可能影响性能的设置。
同样,衡量,识别问题,思考解决方案,构建解决方案(可能是概念证明)并衡量解决方案是否有效非常重要。在不知道问题的情况下,不要陷入首先选择解决方案的陷阱。
答案 2 :(得分:0)
听起来好像你是处于一个相对较低级别的职位,你的经理人(还)不相信你的能力和判断力。
我不明白为什么他们会希望你承诺特定的加速而不知道它是否可以实现。
也许他们真正理解代码及其问题,并且知道可以实现一定程度的加速。在这种情况下,他们应该知道如何做到这一点......所以试着让他们告诉你。即使他们的想法不是很好,你也会因为至少试一试而受到赞誉。
也许他们只是试图施加压力(或传递给他们的压力),以使你更努力地工作。在这种情况下,我可能会给他们一个值得但保守的估计。 然后花一些时间更彻底地调查问题。如果经过几天的研究,你发现你的“袖口”估计值明显偏离了标记,那么请回到管理人员那里进行更准确的估算。
在技术方面,两分钟的启动时间对我来说听起来相当过分。应用程序在这段时间内做了什么?从文件或数据库加载数据结构?重新计算的东西?分析可能有助于回答其中一些问题,但您还需要了解系统的体系结构,以了解配置文件统计信息。
在不知道真正的问题是什么的情况下,我建议尝试让服务尽早提供,同时在后台进行一些不那么关键的初始化,或者懒散。 (如果从这个角度来看,你的经理们对缓存一些重要数据的想法可能会变得很好。)或者,我会看看为系统实现“热备用”是否可行,或者复制它以一种允许你减少启动时间的方式。