这里我选择了nginx来分析性能影响因素,通过在容器内搭建nginx,然后用另一个终端进行大量请求测试发现CPU使用率很高,但是看下面的进程的CPU使用率好像很正常。
这里使用top和pidstat命令来定位问题,发现task任务数量不正常,想到可能是短时间的应用导致的问题,如下面的两个:
(1)应用里直接调用了其他二进制程序,这些程序通常运行时间比较短,通过top等工具发现不了。
(2)应用本身在不停地崩溃重启,而启动过程的资源初始化,很可能会占用很多CPU资源。
另外通过对nginx大量请求测试可能会出现丢包问题。可以总结为以下几个方面:
在两台 VM 连接之间,可能会发生传输失败的错误,比如网络拥塞、线路错误等;
在网卡收包后,环形缓冲区可能会因为溢出而丢包;
在链路层,可能会因为网络帧校验失败、QoS 等而丢包;
在 IP 层,可能会因为路由失败、组包大小超过 MTU 等而丢包;
在传输层,可能会因为端口未监听、资源占用超过内核限制等而丢包;
在套接字层,可能会因为套接字缓冲区溢出而丢包;
在应用层,可能会因为应用程序异常而丢包;
总之,对于具体的应用程序,我们可以从CPU ,内存, I/O以及网络等几个方面去分析影响性能的因素,利用性能测试工具去定位和解决问题。