曾经给一个企业的ERP系统调优。除了系统架构、配置、数据库、操作系统等方面外,发现系统的实现有很多低级问题。
首先,是核心代码的低效。比如,关键地方用了synchronized,但做的不够细致,导致一些没必要纳入同步的耗时调用也包含在同步块中。关于synchronized,还有一些类型涉及到隐式的同步,也应引起注意。
其次,是数据库连接的使用。虽然采用了连接池,但在一次事务中多次调用数据库时,每次都获取一个连接。这无形中增加了事务的细粒化后的资源竞争。
第三,页面逻辑上存在过多的超前调用。比如,一个页面中有多个Tab,当页面被访问时,一次性地获取了所有Tab的内容。如果这些Tab页面中包括耗时操作,显然会降低用户体验。如果包括数据库操作,还会增加对数据库连接的占用。
与之相应的是Tab页面中的提交。有些实现会一次性地刷新所有Tab页面。这显然也是非常不明智的。
第四,在跨(子)系统间同步数据时,不考虑增量修改,每次总是提交所有内容,因此也得承受小时级以上的等待。
第五,大数据量查询没考虑分页。这不仅加重数据库服务器的负担,占用了网络带宽,还可能导致JVM的内存溢出。
另外,有个容易引起忽视的问题,发布到生产系统的代码中包含有大量的调试输出信息。
以上这些问题,说起来容易,但真正在落实时,很多人都没太注意,对于初级、中级程序员尤其如此。