作为一名测试人员,在工作中肯定会遇到各种性能问题,我大致汇总了五个原因导致性能瓶颈,一起来学习一下吧。
举个例子:
比如我们访问一个网页或请求,服务器返回的结果非常慢或者访问不到,可以从以下几个方面来考虑:
1.数据库连接池被沾满
需要有空闲的才能执行其他SQL,现在是从数据库拿不到结果
2.数据库死锁
Show engine innodb status;看是否有block字样
数据库死锁过程,怎么看:
3. 线程死锁
以后做项目:第一个排查,硬件,硬件没问题,第二个排查线程栈
Ps -ef | grep java
Jstack java10092 > 3月26日.log
Vi 3月26日.log查看
1.看BLOCK
2.看是数据库死锁还是线程池死锁,线程池死锁有http和BLOCK字样
3.at后面就是原因,哪个class下的某个方法导致的(java:43 )
at 后面的at.org.tarena.common.dbuile.conection
拔代码 webapps/项目名/web-INF/class中找org.tarrena.common下的dbuile.class文件
Vi dbuile.class会有乱码,需要将该文件反编译一下
4.线程池满了 应用程序的代码需要线程池去调度
1)配置线程池用户,才知道配多少个线程,去cd omcatconfservice.xml 看看配多少个连接池;vi service.xml :Tomcat最大连接池默认是200 connector port=8080这一行
2)配置线程池用户,才能进行监听 cd omcatconf omcat-users.xml
Vi tomcat-users.xml 看看是否配置了用户数,在Tomcat主页看一下数量
如果没有配置,看不了,配置的话,需要把注释掉的重启Tomcat才可以,查看Tomcat主页(IP:端口号),看用户满了没有,如果count数没满,说明这不是转圈问题根源
3)数据库连接池
连接数据库 mysql -u root -p
使用哪个数据库:cd opt/lampp/bin/mysql/ 启动:.mysql/ -u root -p
如何启动lampp下的数据库:find / -name mysql 进到mysql启动文件所在的目录 执行 ./mysql
use mysql;
show full processlist; 当前数据库对外连接的进程数,观察有几个项目对应的数据库(db)跟我设置的项目数据库开的个数相比较判断是否用满了
如何查看我设置的项目数据库个数:cd /user/local/tomcat/webapps/dangdang/WEB -INF/classes/dbcp.properties Vi dbcp.properties 中找到maxactive的个数
5.硬件原因,CPU满了或者负载非常高 top命令就可以看哪些进程占用较高,负载怎么样(load average)
CPU高不高
IO操作:iostat 看TPS 然后iostat 3 ,看具体的tps是否高