性能问题是程序员在开发软件的时候需要重点关注的问题之一,下面我们就一起来了解一下,软件系统性能问题常见类型都有哪些。
1、界面卡、反应慢。界面卡、反应慢主要是指程序的响应速度过慢,包括:界面对鼠标键盘输入的响应速度;一些比较耗时的系统API的处理速度,比如读写文件等;以及目标程序的一些关键路径的执行速度。
界面响应速度,这里我们可以用每次消息循环的执行的时间点以及时间消耗来判断。另外我们也可以向目标程序发送WM_NULL消息跟据其响应时间来判断响应速度。
系统API执行速度,用hook的方法记录调用的线程ID、时间点、消耗时间以及一些必要的参数(比如读写的是哪个文件)。
对于一些关键路径,我们需要记录下来执行时的线程ID、时间点和时间消耗。这一点针对性比较强,直接在目标程序加入log就可以了。当然也可以用hook的方法,但不推荐。因为Hook的实现相对比较复杂,需要实现一个跳板函数,在跳板函数中记录相关信息。Hook更适应于记录一些调用次数频繁的系统级API。而一些关键路径往往与目标程序逻辑密切相关,整个过程只有几次调用,甚至可能只有一次或完全不调用。这样就完全没有必要用hook的方法。
2、CPU高、内存大
针对CPU高、内存大,我们按时间顺序以固定的时间间隔记录下来目标进程的CPU和内存的消耗就可以了。在CPU占用方面我们也可以更进一步记录下每个线程的CPU消耗。
3、有了上面的数据就够了吗
不够。比如,当我们收集到一组数据,分析后发现目标进程在启动后35秒-40秒的这段时间对WM_NULL消息无响应(界面卡住)。然后呢然后我们仍然没有办法知道为什么会卡,以及卡在哪里。所以我们还需要目标的调用堆栈。同样按时间顺序以固定的时间间隔记录下堆栈信息。这样当我们发现问题的时间点后,便能得到当时一个堆栈执行情况。
4、还需要哪些数据
任何你关注的数据都可以记录下来。假如你关注IO对性能的影响,那么就记录下IO量和页面错误的数据;你怀疑是不是有其它模块的注入影响了你的程序,那么你也可以记录下来目标进程的模块信息……
组织分析数据
把数据初步整理,以图形的方式直观的表现出来。