一.生产出错! 今天早上11点左右,我在工作休息之余,撸了一下猫.突然,工作群响了,老大在里面说:APP出错了! 妈啊,这太吓人了,因为只是说了出错,但是没说错误的信息.所以我赶紧到APP上看看. 这果然是出错了,而且还是简单而粗暴的500,太吓人了. 二.本地赶紧调试起来! 既然线上出错了,我们又不能直接进行调试,那当然得马上在本地搞起来了! 1.代码是否有错? 立马启动本地的项目,访问对应的接口,看看是不是代码哪里出错了. 好了,本地的代码和 SQL 都是没错的! 2.SQL 是否有错? 那…
昨天下午大神把组内几十号人召集在一起开Online bug分析大会,主要是针对近期线上事故从事故原因和解决方案两个维度来分析. 对金融软件来说,每一次的线上事故都有可能给公司带来重大的损失,少扣了用户的钱,为公司带来资金方面的亏损:多扣了用户的钱,则为带来不必要的合约或法律纠纷,故测试金融软件不比其他行业的软件,后者线上bug大多不会直接引起资金方面损失,最多就是用户体验不好,功能没有实现,导致用户量的流失. 对金融软件来说没有小bug,一旦出现bug那就是重大的bug,必须引起高度重视. 俗话…
关键词:MySQL Index Merge 前言 MySQL 的锁机制相信大家在学习 MySQL 的时候都有简单的了解过,那既然有锁就必定绕不开死锁这个问题.其实 MySQL 在大部分场景下是不会存在死锁问题的(比如并发量不高,SQL 写得不至于太拉胯的情况),但是在高并发的业务场景下,一不注意就会产生死锁,而这个死锁分析起来也比较麻烦. 前段时间在公司实习的时候就遇到了一个比较奇怪的死锁,之前一直没来得及好好整理,最近有空复现了一下,算是积累一点经验. 业务场景 简单说一下业务背景,公司做的是…
原文链接:线上BUG:MySQL死锁分析实战 1 线上告警 我们不需要关注截图中得其他信息,只要能看到打印得org.springframework.dao.DeadlockLoserDataAccessException就足够了,就是MySQL发生死锁导致服务抛异常. 关于接口得逻辑,可以大概描述为:C端调用接口查询店铺得追踪事件列表,如果查询为空列表则顺便给初始化,这里的初始化是批量插入一批事件追踪列表,然后再返回,这里要给到一个关于表的信息点:这个表有主键索引和唯一索引. 1.1 云日志&死…
本文来源于数据库内核专栏. MySQL慢日志(slow log)是MySQL DBA及其他开发.运维人员需经常关注的一类信息.使用慢日志可找出执行时间较长或未走索引等SQL语句,为进行系统调优提供依据.本文结合线上案例分析如何正确设置MySQL慢日志参数和使用慢日志功能,并介绍网易云RDS(InnoSQL)对MySQL慢日志功能增强.MySQL参数组功能网易云RDS实例提供了参数组管理功能,可通过参数管理界面查看绝大部分常用的MySQL系统参数,用户可以了解当前运行值和建议值,如下所示: 用户还…
测试奇谭,BUG不见. 大家好,我是谭叔. 一提到线上问题,很多测试小白要么"原则性"恐惧,要么憨憨如也,不知如何下手. 本篇文章,我再细化下这道常见的面试题,跟大家捋捋发生线上问题,作为测试人,该有的思路. 首先,直接给出万金油三步公式: 第一步,初步排查,快速恢复业务: 第二步,查找问题根本原因,彻底解决: 第三步,团队分享,避免出现类似问题. 这三步中的措辞,十分重要.特别是第一点--初步排查,快速恢复业务. 出现问题,不要一来就盲目定位,本着不找到根本原因不罢休的思想去处理突发…
案例 一个管理后台的bug,把操作记录中的操作员姓名,写成了该操作员的id.原因是修改了一个返回操作人姓名的函数,返回了操作人的id.但是还有其他地方也用这个函数,导致其他地方把姓名字段填写成了操作员的id.该bug污染了一条修改记录,操作员手动删除就好了.回滚代码后恢复.本质是修改了函数的返回值,却没有查看所有调用的地方.这个函数的名字叫getinfo,但是在代码的其他模块中也有同名函数,返回的都是id,让修改的人以为都是一个函数,引起了混淆.所以函数名也要修改,做到通过名字能够清晰看出函数功…
记一次线上bug排查,与各位共同探讨. 概述:使用quartz做的定时任务,正式生产环境有个任务延迟了1小时之久才触发.在这一小时里各种排查找不出问题,直到延迟时间结束了,该任务才珊珊触发.原因主要就是后台有几个5分钟一刷的定时任务,调度器不停的调度后台任务,阻塞了别的任务,出现了问题. 本文主要目的:1.记录排查过程(思路): 2. 分析quartz的线程调度规则: 3. 针对本问题的相关解决方案: 排查过程:1…
听说"双11"是这么解决线上bug的 --Android线上热修复的使用与原理 预备知识和开发环境 Android NDK编程 AndFix浅析 Android线上热修复的原理大同小异.这里仅仅针对眼下最火的框架AndFix进行解说.主要从AndFix的使用.原理以及优缺点三个方面进行阐述. 使用方式 介绍 AndFix是一个AndroidApp的在线热补丁框架. 使用此框架,我们可以在不反复发版的情况下,在线改动App中的Bug.AndFix就是 "AndroidHot-F…
之所以想写下线上bug,因为发觉有些公司对线上bug的处理是比较严格甚至是很苛刻,涉及到的相关人可能会因此而背黑锅. 之所以会存在这样情况,因为公司各部门都有关联,特别是用户.老板的投诉,也给公司会造成直接口碑或经济等重大损失. 第一节: 下面举几个实际发生过的关于线上bug的例子: 1.一个修改update操作,结果引起删除delete了一条数据: 问题追溯:实际上测试漏测了,导致项目开发leader辞退,团队扣奖金. 2.一个地图上的所有目标加油站数据加载不出来: 问题追溯:实际上因为客户端…
生活中,我们需要掌控自己的时间,减少加班,提高效率:日常开发中,我们需要操作时间API,保证效率.安全.稳定.现在都2020年了,了解如何在JDK8及以后的版本中更好地操控时间就很有必要,尤其是一次线上BUG的发生,让小明更是深有体会. 背景 在Java8以前,每每操控时间,我们经常使用的类库就是Date,并且会通过SimpleDateFormat类对时间进行格式化.你可知道?Date类是一个可变类,SimpleDateFormat类也是线程不安全的,因此在多线程的场景下执行格式化操作时,就会发…
缘由 本人从事游戏开发很多年一直都是游戏服务器端开发. 因为个人原因吧,一直在小型公司,或者叫创业型团队工作吧.这样的环境下不得不逼迫我需要什么都会,什么做. 但是自我感觉好像什么都不精通..... 好了好像偏题了! 回归正题 现在公司是做手游开发,java服务器 + U3D做客户端的mmo手游,仿魔兽世界! 做软件的都知道一个蛋疼的事情,那就是线上Bug.但是做服务的人更清楚另一个蛋疼的事情,就是在线更新,不停服更新. 知道的人,想想都蛋疼,当然不知道的,那就只能自己想象了. 线上经常出问题大…
[线上故障与线上Bug界定] 一.线上故障: 1.  故障参照公司规范稍做调整: a)         1级故障:资讯首页或主App首页无法打开:多条业务线同时不可用:超过15分钟: b)         2级故障:任意业务线主页面无法打开,主要功能无法使用:超过15分钟. c)         3级故障:单个CDN节点故障:影响任意业务线关键功能使用的高概率闪退性Bug:超过15分钟. d)         4级故障:内部支持系统无法使用,超过60分钟. 2.  故障通报范围: a)     …
记录一次线上bug,总的来说就是弱网和重复点击.特殊值校验的问题. 测试场景一:        在3g网络或者使页面加载速度需要两秒左右的时候,输入学号,提交学生的缴费项目,提交完一个 学生的缴费后,再输入另一个学号,这时候当前学生的信息还未显示完全,点击提交,就造成了前一个 学生的缴费数据和当前学生缴费数据的交叉. 通过浏览器的开发者工具(F12)模拟网速: 测试场景二:        特殊值校验,统计金额,前端将万元转换为元,数据为一些特殊值时,比如:0.69万元,页面上金额显示错误. 总结…
(转载)http://blog.chinaunix.net/uid-20665047-id-3137284.html column 'id' in field list is ambiguous 这个错误,是因为你查询语句里面有id字段的时候,没有说明是哪个表的id字段,应该加上表名(或者别名)来区分. 用表名进行区分的例子:select student.id, student.name, score.totalfrom student, scorewhere student.id = scor…
[Err] 1052 - Column 'XXXX' in field list is ambiguous 例如: SELECT id, a.name, price, `describe`, schoolid, `subject` FROM tariffpackages a, schooluser b WHERE a.schoolid=b.Schoolid 出现错误: [SQL]SELECT id, a.name, price, `describe`, schoolid, `subject` F…
我们的线上erp系统一天使用人员反映部分数据死活保存不上而且页面操作很慢.开始以为操作数据量大的原因, 后来查看了我们线上的glowroot系统,发现slowtrace中有超长时间的访问,点开查看详情发现有语句产生了思索. 二话不说 登录生产环境数据库,查看引起状态 >show engine innodb status \G; 发现死锁关键词 随后分析之后的transaction 共有2个事务. 事务(1)产生了x排他所 事务(2)产生了s共享锁 我们都知道 共享锁和排它锁如果相遇是竞争的,是冲…
本文由作者郑智辉授权网易云社区发布. 0.前言 本文通过分析线上MySQL慢查询日志,定位出现问题的SQL,进行业务场景分析,结合索引的相关使用进行数据库优化.在两次处理问题过程中,进行的思考. 1.简要描述 在九月底某个新上的游戏业务MySQL慢查询日志 # Time: 2017-09-30T14:56:13.974292+08:00 # Query_time: 6.048835  Lock_time: 0.000038 Rows_sent: 0  Rows_examined: 1288441…
针对app线上修复技术,目前有好几种解决方案,开源界往往一个方案会有好几种实现.重复的实现会有造轮子之嫌,但分析解决方案在技术上的探索和衍变,这轮子还是值得去推动的 关于Hot Fix技术 Hot Fix技术,简单来说就是针对线上已发布app出现了bug,在不推送新版本的情况下通过发布修复补丁进行修复.通常是刚上线的app,需要快速线上修复bug,类似的技术就叫做热修复或热补丁. 热修复技术能带来什么 让app具有了上线后被修复的可能性,增加事故风险可控性: 避免为修复bug而快速增发新版本,让…
前言 在部署线上项目时,相信大家都会遇到一个问题,线上的 Bug 但是在本地不会复现,多么无奈. 此时最常用的就是取到前端传递的数据用接口测试工具测试,比如 POSTMAN,复杂不,难受不? 今天陈某教你一招,让你轻松调试线上的 Bug.文章目录如下: 什么是 JPDA? JPDA(Java Platform Debugger Architecture),即 Java 平台调试体系,具体结构图如下图所示. 其中实现调试功能的主要协议是JDWP协议,在 Java SE 5 以前版本,JVM 端的实…
快速定位iOS线上App崩溃在哪个控制器里面,需要和后台配合使用 下载本SDK并手动添加到项目里 新建所有的页面都继承于YZViewController 在AppDelegate的didFinishLaunchingWithOptions方法里面写下如下代码: if ([[[NSUserDefaults standardUserDefaults] valueForKey:@"BUG"] isKindOfClass:[NSDictionary class]]) { NSLog(@&quo…
在上一篇 Docker + node(koa) + nginx + mysql 开发环境搭建,我们进行了本地开发环境搭建 现在我们就来开始线上环境部署 如果本地环境搭建没有什么问题,那么线上部署的配置也就很简单了 我所使用的环境,Linux Mint,命令有不同可以适当更改 目录结构 - compose 新建,线上环境配置 - data - conf - node_modules - static - docker-compose.yml - docker-compose-prod.yml 新建…
1.下载这个jar 2.运行这个jar 3.选取你需要定位的问题应用进程 然后各种trace -j xx.xxx.xx.className methodName top -n 3 这个后面要补充去看,把线上搜集的文档整理下:…
[Err] 1052 - Column 'modify_time' in where clause is ambiguous 出错的语句: SELECT AVG(T.se)%60FROM( SELECT TIMESTAMPDIFF(SECOND,first_transfer_time,modify_time) se FROM xes_appeals INNER JOIN xes_appeal_templates WHERE xes_appeals.app_type = xes_appeal_te…
前提 在线执行一些大事务或锁表操作(给某个核心级表加一列或者执行修改操作),此时不但主库从库要长时间锁表,主从延迟也会变大.未避免大事务sql对整个集群产生影响,,我们希望一条SQL语句只在Master数据库上执行,而不复制到Slave数据库.这时候,sql_log_bin这个参数正是需要的.我们就可以这样操作: 1.先在备库执行 原slave mysql>set sql_log_bin=0; 原slave mysql>大事务sql 2.切换主备节点 3.在原主库再执行 原master mys…
tbl_user_data占用了大量磁盘空间,数据表占用大概200G,索引30G左右,查询非常慢,影响业务的支持进行现在需要对它进行清理 临时解决方案是将原表重命名,新建一个和这个表相同的空表来替换(缺点是不能做到根治,隔一段时间以后需要重新处理) 根除的办法是重新设计,或者在客户端进行过滤避免过多垃圾数据进入系统 1.新建一个和现在表相同结构的表create table tbl_user_data_new like tbl_user_data 将主键的ID改为bigint并且unsigned无…
今天早上开发又过来说,怎么有个语句一直没有查询出结果,数据是有的呀,并发来了如下的sql(为了方法说明,表名及查询均做了修改): select * from t2 where t2.course not in (select name from t1); 两个表的数据如下: mysql> select * from t1; +----+------+ | id | name | +----+------+ | NULL | | chen | | li | +----+------+ rows i…
开发写了几个语句,觉得查询结果跟逻辑有点不相符,就拿到这里一起分析了下. 语句如下: select tp.title, tp.amount, ifnull( ) as aInvestAmount, ifnull( ) as bInvestAmount, ifnull( ) as cInvestAmount from t_invest ti join t_user tu on ti.user_id = tu.id join t_project tp on ti.project_id = tp.id…
讲述背景,刚入职新公司2个月的时候,接手一个红包系统.资历尚浅,对业务也不是很熟悉.公司开发新的平台,需要使用红包功能来进行推广,按照产品的需求,进行开发...然而,问题就出在这里,红包接口比较陈旧,许多代码并有过多注释(甚至多出注释不全,注释出错),接口参数参差不齐,看的很累. 起先,将系统中所有调用红包的地方,都改成调用我的红包系统.和某端联调时,出现各种bug,参数无规约,返回参数不明确,(不知道要返回些啥,无明确需求文档),最后还是某端哥们,将原来的sql提供给我才得以解决此问题. 接着…
数据库服务使用的是阿里云的mysql,远程进行定时的全量备份,备份到本地,以防万一.mysql数据库远程备份的数据最好打包压缩: [root@huanqiuPC crontab]# pwd/Data/Mysql_Bakup/crontab[root@huanqiuPC crontab]# cat backup_db_wangshibo.sh#!/bin/bashMYSQL="/usr/bin/mysql"MYSQLDUMP="/usr/bin/mysqldump"B…