前段时间测试那边和我说我之前写的一个统计查询数据异常,然后我就从界面开始一点一点排查,浪费了半个多小时时间终于查出了原因,在这里记录一下以提醒自己,同时告诫大家写程序时一定要小心,写完后要检查一遍。
原因:这个统计系统是要统计每个游戏中用户操作用来对数据分析,但是因为之前历史遗留的原因数据都放到一个表中,导致我这边查询异常缓慢。
经过:因为之前的统计配置已经在安装包中配置好了,重新修改无疑会增加很大的工作量,所以我这边准备写一个perl程序(tnlog.pl)手动的将统计数据从总的统计表中插入到分游戏表中并删除总游戏表中的数据用来提高效率,同时写一个监控查询监控我写的perl程序是否挂掉,一旦挂掉就重启这个程序,最后在linux服务器上添加计划任务不断运行监控程序使数据能够实时传递。
结果:经过我的排查发现我写的那个将数据从总游戏中插入分游戏表的程序(tnlog.pl)一直在不断启动,最后发现是我再action_list的参数有空格导致无法查到插数据的perl程序在运行,所以一直在不断启动那个程序,导致数据出现异常
下面附录我写的那个监控插入数据运行的perl程序:
#!/usr/bin/perl $user = "root"; #程序所属用户 $proghome = '/root/dtj'; @action_list = ( # ####### 由tnlog统计表向各游戏表导入数据 'tnlog.pl brick', 'tnlog.pl pudding', # # # ); $ps =`ps auxw |grep $proghome |grep -v grep`; #print "$ps\n"; foreach $act (@action_list) { $action = "$proghome/$act"; #print "$action\n"; if($ps !~ /$action/) { print "$act is not running ...start it !!!\n"; system("$action > /dev/null&"); } }
总结:写程序时一定要小心,不要忽视任何的特殊符号(尤其是空格,特别不好检查),写完要再检查一遍,并亲自运行一下以保证程序的正常运行