Python 多进程下 logging 日志切分踩坑
起这个事情从一个新的 tornado 服务说起,这个服务部署到预发布环境之后,会有一个流水线定时每个小时触发访问塞数据到这个服务,但是每天晚上12点服务会产生大量的CLOSE_WAIT,导致所有进程被阻塞,整个服务失效。
回顾 TIME_WAIT 和 CLOSE_WAIT 相关知识可以自行 Google ,重点就是一句话:CLOSE_WAIT 问题一定出在自己的代码里面
承查日志发现没有日志…
一开始我怀疑是全局 MongoDB Client 存在进程安全问题,于是把MongoDB Client 放到了数据类当中,并且每次数据类__del__的时候会close连接。重启服务,弄了一个循环跑了一千次,怼了几十万次数据,一觉睡醒啥事儿没有。以为搞定了。
结果…第二天12点又出现了…CLOSE_WAIT
转依然没有日志,无奈只能用 pysnooper 来调试接口,把堆栈打出来,看看卡在哪里了。(这是依然不知道问题在哪里)重启服务就没问题…
这里先夸一下 pysnooper,可以让你直接在服务器上面获得调试能力
123@pysnooper.snoop(output="/xxx/lo ...
与自己的对话
今天聊天,从工作聊到近况聊到从前再到生活人生。
让我又回想了一次许许多多的事情。趁余兴还在,记录一下吧。
可能有一部分的人跟我一样,工作的辛苦反而是久违的放松。
虽说我成长在教师家庭,但从小到大过得却不那么像在书香门第。总在奔波于生计,父亲爱摄影,为了把相机和胶卷的钱赚回来,他总带着我去给学生们拍生活照,那时候艺术照还是个奢侈品,但我们生活照只收两毛钱一张,『过胶』的话三毛钱。那时候中学生的一周零花钱是五毛,愿意拿两毛到三毛来留下自己模样的人络绎不绝。结果半年不到就把钱给赚回来了。
按理说,这样应该是赚到了第一桶金,生活自然会宽松些。然而好景不长,爷爷肝癌晚期,所有的钱都拿去治病,仍是不够。可是在生命面前,欠再多的钱,也不愿放弃。时至今日,我仍然会不时梦到在一条长提上,一辆双杠自行车,一位白发老人,载着一个黄发小儿,江水是红色的,因为斜阳在山那头…还有他在被宣告无可救治之后,回到家中,在病榻前最后教我的那首《静夜诗》…以及那个父亲叫我不用去上学,穿好衣服回老家的下午,我仿佛懂得了些什么。那年我六岁。
我经常抬头望,明月我看到了,可哪颗星星是你。
后来我们还干起了其他行当:小卖部 ...
逆向从 Instruments 中获取 GPU 数据
背景: RTMP SDK需要获取硬编硬解时候的GPU数据,第一时间想起了TraceParser, 但是TraceParser不支持GPU Driver模板. 于是想着能不能扩展TraceParser模板. 发现main.m文件只有寥寥几行代码,完全不知道做了什么, 但是google和km之后发现应该是采用了反序列化的方式来dump出数据. 缺点很明显, 需要自己实现NSCoding,还需要先将.trace文件解压出.run文件. 不知道结构无从下手.
在 github 上发现有一种新的思路TraceUtility, 通过调用 Undocument API 去解析 Trace 文件.下面结合 Hopper 分析Instruments看看.
在逆向过程中发现打开文档用的是NSDocument,-showTemplateChooser:模板选择器. 这意味着一个trace文件是通过NSDocument加上自定义文档类型(模板)来储存的, 当然这个文件类型并不会存在于MIME当中的.
在-initialize:中对 Instruments 做了初始化, 包括一些链接 XCode 中 S ...
不懂汇编,如何逆向(iOS)
** $ 写给像我一样的小白**
0x1 逆向一个APP有哪些步骤(不越狱)
砸壳
dump出头文件
分析功能界面
hopper || iDA 分析伪代码
写hook
打包动态库
注入动态库到APP
APP重签名
安装到手机上
MonkeyDevMonkeyDev是一个xcode插件, 此处先膜一下@庆哥
原有iOSOpenDev的升级,非越狱插件开发集成神器!
- 可以使用Xcode开发CaptainHook Tweak、Logos Tweak 和 Command-line Tool,在越狱机器开发插件,这是原来iOSOpenDev功能的迁移和改进。
- 只需拖入一个砸壳应用,自动集成class-dump、restore-symbol、Reveal、Cycript和注入的动态库并重签名安装到非越狱机器。
- 支持调试自己编写的动态库和第三方App
- 支持通过CocoaPods第三方应用集成SDK以及非越狱插件,简单来说就是通过CocoaPods搭建了一个非越狱插件商店。
庆哥的github如是说.
MonkeyDev解决了上面说到的50%的步骤, 再外加一个动态调试. ...
闭上眼,你看到的更多
今天以一个志愿者的身份参加了一场特殊的音乐会,地点在深圳市残疾人综合服务中心的13楼.
我参加过很多音乐会, 但都是以观众或者表演者的身份, 一周前看到事业群发来邮件, 招募视障者音乐会工作人员, 心头触动了一下,就点击了报名. 因为我觉得,对于同样热爱音乐的他们, 或许我该做些什么.
这场音乐会,没有直播,没有炒作,甚至连DJ都是我这样的新手. 表演者们,小的只有几岁, 年长的我叫一声老爷爷老奶奶不过分. 他们都让人意外地好相处,好商量,伴奏找不到? 没关系,我清唱.
震撼和开心这两个词可以概括我这一天的感受.
至此刻,我心里依然无法平静. 我在音控室, 很多次都是站起来听他们演唱的. 除去了所有的舞台风格, 表现形式……当你闭上眼睛,去感受他们给你传达的东西,真真切切能感受到,他们在并不完整的人生当中, 萃取出来的那种乐观,坚强,豁达. 真想知道蓝天白云,车水马龙,在他们脑海中都是怎样的一种表达.
音乐本就不是用来看的,用眼睛去量度就狭隘了.
一天下来我不敢有丝毫怠慢,播放伴奏,调音,暖场,设备调整….因为我知道, 为了台上这几分钟,需要倾注多少热爱. 以至于我回到公司之后 ...
ARM汇编基础
在高级语言,如OC、C中,操作的对象是变量,而在ARM汇编语言中,操作的对象是寄存器(register)、内存(RAM)、栈(stack)。
寄存器 - 可以看成CPU自带的变量,数量有限,需要更多的时候会把他们放到内存中
内存 - 变量存储的主要载体,容量大,但是对内存的操作要比对寄存器的操作慢得多
栈 - 其实本质也是内存,有特定的读写顺序:先进后出,而且ARM的栈是满递减(Full Descending)的,向下增长,新的变量会被存放到栈底的位置,而且越靠近栈底,内存地址越小.
Continues……
生活、音乐、远方
生活我每天上班几乎都会坐车,打车或是走到深大小西门坐深大的电瓶车到北门,我喜欢坐车的时候发呆,头靠在窗边,目光总不在近处。每天都在走着同一条路,但是对沿途的建筑、人和事都一概不知,那个奇形怪状的雕塑有什么故事,邻街的马路是否一样拥堵,看起来装修豪华的餐厅食物味道如何。有时候,我又只想看看我喜欢的她在哪里留下什么话,希望全世界只有她……
几乎每天都在各种想象中度过这么一段时光。
音乐我是一个对音乐有瘾的人,因为它总能使我异常兴奋。而且我喜欢无拘无束的街头音乐。以前住在一个叫大学城的孤岛,周末的公交和地铁不会让你有想出去的欲望。音乐成了唯一的消遣,谁能告诉我,体育馆闪烁的灯光是否是在开live show,城北和中心湖的卖唱大叔大家喜不喜欢,吉他弹得很好的小哥今天在哪条小路,我会加入他们也会拿着吉他走上街头,我们不在乎彼此的曾经,这一刻只用音乐交流。但经常缺少一个很显眼的东西告诉其他人或者告诉我,这里有音乐,你要来吗?
远方『到此一游』似乎已经是中国人甩不掉的一个flag。我原谅你有感,又不善措辞。但那又丑又不显眼的几个字,我看不出任何个人情怀,还期望后来者,能有所同感?
在火车环境变 ...
致我们终将逝去的浪荡
Nothing come from nothing
早上踩着九点出门,避开所有的阳光走向公司。二月份的深圳,海风恰好能把你的鼻子冻红。
这是我离职回校完成毕业设计的日子,毕设不过是个借口,才离开两个月我才发现我是有多么想念这里的一切。
生活就是你在深圳想念着广州。
离校那天,我哭了,比谈一场四年的恋爱,最后分手了哭得还要惨,只是没有任何声音发出而已。我在开车,副驾的表弟在装作睡觉。最后那个孤岛终于也从地图上被移走了。我没有回头,不忍回头。
生活的孤独才是一个人前行最好的环境,不用去交新的女朋友,没有时刻要一起玩才能维持关系的兄弟,没有爸妈在耳边的唠叨。在陌生的城市,除了时不时心里传来的孤独感,没有其他事情可以打扰到我。我可以一点钟下班,因为家里没有人等我回家。我可以晚上通宵周末睡觉,因为没有人拉我出去玩。
但是这样的生活久了,会让你怀疑人生。
所以,我必须去交一些朋友,往心里去的那种。时间给我们的间隔,带来的是相聚时的热泪盈眶。当然这也包括我深爱的家人。他们作为一份礼物珍藏在我心里,怀疑人生的时候,想想他们。
我是一个半浪漫主义者,这是我天生的理性决定的。我曾经希望能像福尔摩斯一样完全 ...
使用iproxy通过USB将iPhone的端口映射到电脑
在研究ATX的过程中,发现通过WIFI来连接发送指令,会有延迟,响应不够迅速.所以如果可以通过usb代替进行连接,效率会有很大的提高
iproxy是usbmuxd附带的一个小工具,它的作用是将设备的某个端口映射到电脑的某个端口mac下可以通过brew安装
1brew install usbmuxd
用法很简单:
第一个参数是你要映射到的电脑端口
第二个是iPhone的端口
UDID一般不用填,会自动获取,不过多设备连接时,需要用于区分设备
iproxy的作用很丰富,一般搞越狱的大牛,会用来映射iPhone的22端口(ssh端口),我使用atx的过程中使用了iPhone的8100端口所以直接指令如下:
1iproxy 2222 8100
相应的,代码或者脚本里面原本写设备IP的地方就要改成localhost:2222
—->
这样也就没有了很多手机必须要跟电脑在同一网段的尴尬情况
ATX自动化测试框架-iOS
要用到的两大框架ATX: AutomatorX简称,本文主要讨论的iOS自动化测试的框架WDA: WebDriverAgent的简称,是Facebook为苹果开发的一个自动化测试框架优点(对比Appium)引用作者原话:
1. ATX依赖比较少,安装快,上手也快
2. 可以测试第三方应用,比如微信,网易新闻之类
3. 更新方便,可以使用pip直接更新应用
4. 集成图像识别,可以解决仅靠UI无法定位识别的问题
5. 集成测试报告
6. 由知名企业网易的游戏测试开发团队开发(其实就是我们开发的),可以比appium更及时的响应需求,还可以用中文交流和沟通。
WebDeiverAgent使用ATX之前要先安装WebDeiverAgent(以下简称WDA).其实也很简单:
1. 到github上面把包下了
2. 进工程的根目录,运行./Scripts/bootstrap.sh下载依赖库(要用到Carthage和npm)
3. 打开工程文件WebDriverAgent.xcodeproj
4. Scheme选择WebDriverAgentRunner
5. 设备选择模拟器或者iPhone都 ...
