跪求接口压力测试时CPU利用率偏高解决方法
利用jemeter做接口压力测试,在一定并发下,CPU利用率总是偏高,刚才测试一个空接口,结果还是CPU偏高。其中network i/o波动比较大,swap整体趋势是上升的,memeny也是上升趋势。跪求大神给指点下如何优化此部分,请帮忙给出优化的方向好吗。 CPU偏高一般是事务交互频繁造成的,服务器需要不断来回处理,可以考虑优化底层代码,把读写次数(循环语句、嵌套降级 拆分)降低到单一的方法。
尽可能用最原始的输入/输出来跟踪监控;
MEM若是随着时间推移增大是正常的,否则看看是否缓存过大造成甚至内存溢出~
坐等其他大大们解决 因为你空接口时候CPU也很高,给你一些“网络 I/O 优化通常有一些基本处理原则(人家的经验),结合代码进行分析:
1.一个是减少网络交互的次数:要减少网络交互的次数通常我们在需要网络交互的两端会设置缓存,比如 Oracle 的 JDBC 驱动程序,就提供了对查询的 SQL 结果的缓存,在客户端和数据库端都有,可以有效的减少对数据库的访问。关于 Oracle JDBC 的内存管理可以参考《 Oracle JDBC 内存管理》。除了设置缓存还有一个办法是,合并访问请求:如在查询数据库时,我们要查 10 个 id,我可以每次查一个 id,也可以一次查 10 个 id。再比如在访问一个页面时通过会有多个 js 或 css 的文件,我们可以将多个 js 文件合并在一个 HTTP 链接中,每个文件用逗号隔开,然后发送到后端 Web 服务器根据这个 URL 链接,再拆分出各个文件,然后打包再一并发回给前端浏览器。这些都是常用的减少网络 I/O 的办法。
2.减少网络传输数据量的大小:减少网络数据量的办法通常是将数据压缩后再传输,如 HTTP 请求中,通常 Web 服务器将请求的 Web 页面 gzip 压缩后在传输给浏览器。还有就是通过设计简单的协议,尽量通过读取协议头来获取有用的价值信息。比如在代理程序设计时,有 4 层代理和 7 层代理都是来尽量避免要读取整个通信数据来取得需要的信息。
3.尽量减少编码:通常在网络 I/O 中数据传输都是以字节形式的,也就是通常要序列化。但是我们发送要传输的数据都是字符形式的,从字符到字节必须编码。但是这个编码过程是比较耗时的,所以在要经过网络 I/O 传输时,尽量直接以字节形式发送。也就是尽量提前将字符转化为字节,或者减少字符到字节的转化过程。
4.根据应用场景设计合适的交互方式:所谓的交互场景主要包括同步与异步阻塞与非阻塞方式;
页:
[1]