本例记录一次CMS新增的接口访问不到的解决过程和问题排查的思路。
近日由于测试版本的云服务器上,迁移到云服务器上布暑进行测试,由于从开发版本合并到主线版本,体量较大,一次迁移过多,根本原因难以排查。
1.使用JMeter,postman对接口进行测试(SOAP),也只是返回如下消息:(接口xxxx不存在、找不到该接口)
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"><SOAP-ENV:Body><SOAP-ENV:Fault><faultcode>SOAP-ENV:Server</faultcode><faultstring>Procedure 'xxxx' not present</faultstring></SOAP-ENV:Fault></SOAP-ENV:Body></SOAP-ENV:Envelope>
2.使用JMeter访问主线上原有的接口,能够正常访问。
说明该问题仅是此次代码合并造成的,缩小排查范围。
3.查检并比较代码库的最新代码与发布版本的代码,在接口这一块没有区别。
4.检查文件编码也没有异常。
此时可以断定,该问题非代码问题引起。
问题原因什么???
d/b? 接口找不到,程序都还没有访问到接口,和d/b肯定没有关系。这点可以直接排除。
文件访问权限? 第1,2点的接口是在同一个文件上的,所以也不存在文件访问权限的问题。
缓存问题造成? 有可能,范围再次缩小,往服务器配置上进行排查。
5.删除cache文件夹,问题依然没有解决。
6.重启ngnix 与php服务,不起作用。到这里,脑子都炸懵了。
7.进入root下的/tmp, 检查临时文件中可疑文件,锁定可疑文件"wsdl_*"的临时文件,将之删除,果然,终于结束战斗。
总结:解决该问题花费了2小时左右,排查方向是正确的,但是效率还是不够高,记录下来,希望以后遇到类似问题,可以秒杀。