软件系统开发常见的十大瓶颈
J2EE核心是一组技术规范与指南,其中所包含的各类组件、服务架构及技术层次,均有共同的标准及规格。下面是我整理的关于软件系统开发常见的十大瓶颈,欢迎大家参考!
数据库
工作任务内存超过可用的RAM内存
长/短查询
写入冲突
大连接(join)占用内存
虚拟化
共享一个HDD、磁盘寻死(disk seek death)
在云端网络I/O波动
编程
线程:死锁、调试、非线性扩展等
事件驱动编程:callback()过于复杂、如何在函数调用中存储有状态等
缺乏调优、跟踪、日志等
单模块不可扩展、单点故障(SPOF:Single Point Of Failure)、非横向扩展等
有状态应用程序
设计问题:开发的.应用程序只在自己的机器行运行正常,或者只是在几个人测试的时候正常(没有经历压力测试)。
算法过于复杂
相关服务,例如DNS查找以及其他可能屏蔽的服务
堆栈空间
磁盘
访问本地磁盘
随机访问磁盘I/O
磁盘碎片
当SSD写入的数据大于SSD容量时,性能会下降
OS
Fsync饱和,Linux缓冲区填塞(Fsync flushing, linux buffer cache filling up)
TCP缓冲区太小
文件描述符限制
功率分配(Power budget)
缓存
没使用memcached(数据库崩溃)
HTTP中:headers、etags、没有使用gzip压缩等。
没有充分利用浏览器缓存
字节码缓存(如PHP)
L1/L2缓存:这是个令人头疼的大瓶颈。把关键并且经常访问的数据存储在L1/L2中。这涉及到很多:snappy网络I/O,列数据库直接在压缩数据上运行算法等。利用一些技术不销毁你的TLB。最重要的思想是紧紧的抓住计算机的体系结构,涉及多核CPU,L1/L2,共享的L3,NUMA RAM,从DRAM到芯片数据传输带宽/延迟,DRAM缓存的DiskPages,DirtyPages,流经CPU<->DRAM<->NIC的TCP包。
CPU
CPU过载
内容切换—>单核上开启的线程过多、Linux调度器、系统调用太多等
IO等待—>所有的CPU在同速等待
CPU缓存:缓存数据是一个细粒度进程,为了在多个实例与不同的值数据之间找到正确的平衡,来保持缓存数据的一致性和繁重同步。
底板吞吐量(Backplane throughput)
网络
NIC刷爆、IRQ饱和、软中断占用掉了100%CPU
DNS查询
数据包丢失
网络中存在预期外的路由
访问网络磁盘
共享SAN
服务器故障—>无法从服务处得到响应
进程
测试时间
开发时间
团队规模
预算
代码债务
内存
内存不足—>杀死进程,切换到swap,挂起
内存不足导致磁盘交换(与swap相关)
记忆库开销过大(Memory library overhead)
内存分片(在Java中需要会因为内存回收而停顿在C中,malloc总是开始分配内存)
对于程序员来说,在工作中除了实现自己的个人价值以外,同时也需要不断吸收新的知识来充实和提高自己的能力。
今天,我们就一起来了解一下,程序员在技术瓶颈期应该如何突破。
作为一个技术人,不知道你有没有遇到过下面的情况?“我学不到新东西”“我感觉没啥成长”“每天都在重复劳动”??其实,每个技术从业者,多多少少都会遇到工作或学习瓶颈期。
产生瓶颈期,往往不是因为我们不够努力,而是以下原因导致的:1、无法积累有效的项目经验,一直在做着重复的事情,成长出现断层。
2、企业的培训较为传统,多为被动接收,“营养成分”较低,对业务开发无明显提升。
3、技术书籍和网上的免费资料实效性较低,且大多理论性会大于实用性,导致无法应用到工作场景。
那么,该如何解决呢?1、借助“巨人的肩膀”,快速成长。
学习资料非常关键,真正经典的素材只占1%。
如果希望得到快速成长,或是成为技术领域高手,那么就需要借助“巨人的肩膀”。
比如,如果可以接触到BAT、或者国外大公司的资深技术人,你的学习效果就会事半功倍。
2、利用碎片化时间,提升专业能力。
一旦进入职场,我们很难有成块的时间去系统的学习一门知识,良好的状态是利用自身碎片时间,学习与业务紧密相关的实战知识。
网上下载的资料,或者一些技术书,可能无法在碎片化时间消化。
3、每个角色都要懂其他角色的东西,才能成为优秀的角色。
虽然研发团队角色不同,如产品、研发、测试。
但是这些角色都是相互交叉影响的。
如果对其他领域没有一定的认知,就会听不懂他们的诉求本质和技术方案,耗费沟通成本。
而能在多方配合的沟通场景中,北京北大青鸟http://www.kmbdqn.cn/发现通过学习到的多样技术能力,直面解决技术问题,就可以在技术成长之路上得到提升,成为一名优秀的技术leader。
有没有“拿来就用”的解决方法呢?以上推荐的3点解决方法,可以总结如下:1、学习使用有价值的经典学习材料2、持续学习,碎片化汲取“营养”3、保持在多领域对技术知识的拓展。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)