血的教训:线程池定义一定要全局化,共享使用
一、发现问题
最近我们上线了一个比较底层的业务服务,上线后研发也去盯着服务器看了日志,没有发现有啥问题,就将服务全量上线了。谁知道过了15分钟左右,上游业务方打电话过来了,说报调用我们的业务服务出现超时。
这时候研发赶紧登上相关的机器去看,发现日志量很少,机器很卡。再有人去登入这台机器的时候就登入不了。研发初步考虑是网络问题或者宿主机问题,于是找来运维。
运维登入进去机器通过
查看运行的进程数,结果为60000多。通过脚本查看linux进程的进程限制:
,结果是
进程总数差不多进程总数的限制。考虑到半小时前更新了新服务,去服务的日志看了看,原来tomcat有jvm内存溢出的日志:
二、查找和解决问题
通过上面的一些现象,赶紧将刚才的发布的机器回滚了,避免更大的问题。观察了半个小时,上游再也没有发现我们的服务报错的问题了。于是我们终端review了刚刚上线的一个pr,
发现线程池的代码竟然定义在方法体里面:
这样每次调用这个方法,就构建一个新的线程池,开启了新的8个线程。又查找了《Java线程与Linux内核线程的映射关系》[1] , 发现:JVM线程跟内核轻量级进程有一一对应的关系。线程数达到60000多,处级进程上限65535。 每开启一个进程。
对于应用进程发生:out of memory,是因为多线程的开销内存超过jvm的最大堆内存限制。 没开启一个进程,都有内存开销,内存超过linux内存的上限了,怪不得机器快僵死。
为了验证这个猜想,于是将有错误的代码进行压测,果然问题复现,出OutOfMemoryError和机器被拖挂。然后将代码修改为:
然后进行了压测,问题没有复现,问题解决。
三、事后review和处理方案:
复盘会议上,qa和相关人一起提出了如下方案来避免类似问题:
1、完善监控指标
本次线程池超限,java进程也有报错,就是报
2、代码review一定要做,并且认真做
本次程序员的线程池代码为低级失误,review认真是可以看出来的。
3、有大的优化要进行压测
本次pr,有线程池的使用,所以要进行压测
4、添加平台监控
添加平台监控,当linux进程大于20000个时候就就对进程数进行报警
参考:
[1] http://blog.sina.com.cn/s/blog_605f5b4f010198b5.html
修改记录:
2019-07-18 丰富了案例的描述
via 王欣的博客
一、发现问题
最近我们上线了一个比较底层的业务服务,上线后研发也去盯着服务器看了日志,没有发现有啥问题,就将服务全量上线了。谁知道过了15分钟左右,上游业务方打电话过来了,说报调用我们的业务服务出现超时。
这时候研发赶紧登上相关的机器去看,发现日志量很少,机器很卡。再有人去登入这台机器的时候就登入不了。研发初步考虑是网络问题或者宿主机问题,于是找来运维。
运维登入进去机器通过
1
ps -ef | wc -l
查看运行的进程数,结果为60000多。通过脚本查看linux进程的进程限制:
1
cat /etc/security/limits.conf
,结果是
1
2
root soft nofile 65535
root hard nofile 65535
进程总数差不多进程总数的限制。考虑到半小时前更新了新服务,去服务的日志看了看,原来tomcat有jvm内存溢出的日志:
1
2
java 进程out of memeory
Java HotSpot(TM) 64-Bit Server VM warning: Exception java.lang.OutOfMemoryError occurred dispatching signal SIGTERM to handler- the VM may need to be forcibly terminatedy
二、查找和解决问题
通过上面的一些现象,赶紧将刚才的发布的机器回滚了,避免更大的问题。观察了半个小时,上游再也没有发现我们的服务报错的问题了。于是我们终端review了刚刚上线的一个pr,
发现线程池的代码竟然定义在方法体里面:
1
2
3
4
5
6
7
8
public class BizService{
......
pulic processBiz(){
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(8);
......
}
......
}
这样每次调用这个方法,就构建一个新的线程池,开启了新的8个线程。又查找了《Java线程与Linux内核线程的映射关系》[1] , 发现:JVM线程跟内核轻量级进程有一一对应的关系。线程数达到60000多,处级进程上限65535。 每开启一个进程。
对于应用进程发生:out of memory,是因为多线程的开销内存超过jvm的最大堆内存限制。 没开启一个进程,都有内存开销,内存超过linux内存的上限了,怪不得机器快僵死。
为了验证这个猜想,于是将有错误的代码进行压测,果然问题复现,出OutOfMemoryError和机器被拖挂。然后将代码修改为:
1
2
3
4
5
6
7
8
public class BizService{
ExecutorService fixedThreadPool = Executors.newFixedThreadPool(8);
......
pulic processBiz(){
......
}
......
}
然后进行了压测,问题没有复现,问题解决。
三、事后review和处理方案:
复盘会议上,qa和相关人一起提出了如下方案来避免类似问题:
1、完善监控指标
本次线程池超限,java进程也有报错,就是报
OutOfMemoryError,可是报警系统竟然没有第一时间收到。查了监控系统,在前一段项目进程了重构,日志路径修改了,原来的采集配置竟然没有同时修改。导致造成损失却没有收到警报。2、代码review一定要做,并且认真做
本次程序员的线程池代码为低级失误,review认真是可以看出来的。
3、有大的优化要进行压测
本次pr,有线程池的使用,所以要进行压测
4、添加平台监控
添加平台监控,当linux进程大于20000个时候就就对进程数进行报警
参考:
[1] http://blog.sina.com.cn/s/blog_605f5b4f010198b5.html
修改记录:
2019-07-18 丰富了案例的描述
via 王欣的博客
无「事」一身轻
...当我们和生命中真正重要的人相处时,一定要认真地温暖地对待对方。这样的相处注定不只是轻松愉快的,因为一定会触达彼此的黑暗面,所以很多时候,我们会选择逃避...不要逃避,不要想着叙事,不要浪费时间。老天爷肯定会残酷地夺走对方,大家肯定来不及好好告别。我们唯一不会后悔的,就是尽心尽力地对待了对方...不仅对人应该如此,对自己真正感兴趣的爱好,对自己在从事的事业,也应该如此...
via @Lenciel
...当我们和生命中真正重要的人相处时,一定要认真地温暖地对待对方。这样的相处注定不只是轻松愉快的,因为一定会触达彼此的黑暗面,所以很多时候,我们会选择逃避...不要逃避,不要想着叙事,不要浪费时间。老天爷肯定会残酷地夺走对方,大家肯定来不及好好告别。我们唯一不会后悔的,就是尽心尽力地对待了对方...不仅对人应该如此,对自己真正感兴趣的爱好,对自己在从事的事业,也应该如此...
via @Lenciel
Pensieve: 2509
所读所观所玩
读书来说, 读完了六本, 都是在微信读书上读完的, 30天阅读挑战通过后开始尝试365天的挑战. 按时间顺序, 首先是葛亮的汉字再发现, 这本书写得很不像我知道的葛亮, 完全就是一个学术论文的合集. 而这本书最大的问题在于不确定性, 我们只能推测而没有办法令人完全信服地证明这些字形变迁的源流. 当然, 文史类的研究大都也没法像科学一样真正得到确定性和可证伪的结论. 第二本是数据产品经理的自我修养, 这本书里做广告推荐那部分很有意思, 虽然现在对我一点用都没有, 但是有很多血泪教训. 接下来是很水的一本Deepseek辅助网文写作实践手册, 感觉最多可以骗骗小白, 对于已经高强度使用LLM好久的我而言, 这本完全是在说废话. 再往后是一本很有趣的书, 沃顿商学院时间管理课, 这本的书名让你感觉有权威背书, 里面的一些idea也都是挺好的, 但是我怀疑里面所有的故事都是编出来的, 而不是基于事实的. 然后是本月最佳的李飞飞自传, 我看见的世界. 她年轻时求学的经历挺值得一读, 但是后面做ImageNet的经历就让我感觉是恰逢其会了. 最后一本是做对产品, 这本虽然不是本月最佳, 但是对我来说可能是最有价值的一本, 因为里面给出了很详尽地如何验证产品的例子. 要点就是, 要想一个好的主意, 找到真正的用户, 看他们是否会愿意真金白银地买单.
没怎么看电影, 整理收藏的时候下载了邪不压正, 跳着看完了, 不算很好.
游戏玩了丝之歌, 很是顺滑, 不过难度相对于空洞骑士有明显地增加, 雪山拿二段跳花了我一整晚. 总体评价是很值得玩, 各种细节, 各种动画, 都对得起这几年的等待. 另外, 还关注了一下TI的决赛, 又输了, 而且Dota这个游戏让我觉得越来越陌生. 也许是时候说再见了. 另外, Good Sudoku最高难度的Eternal模式通了100关, 然后我觉得数独没什么好玩的了, 就删了游戏.
面试
这个月开始了在Canva的面试工作. 之前的工作中, 在大部分公司都有参与过面试和决策的过程. 在Canva面试的感受不太一样, 首先是有一个相对比较完善的题库, 很方便面试官上手. 然后是面试的过程分得很细, 编程语言, 技术沟通, 系统设计等等分得很开, 但是这个问题是, 很多时候面试考察的点是没有办法完全区分开的. 比如我参与过的一个技术评审能力和技术沟通能力的面试, 实际上就需要面试者对系统设计, 任务切分等等有比较深厚的基础, 更不用提要能读懂Pull Request所需要的编程语言能力了.
下一次reverse shadow后就会独立开始面试了, 没啥忐忑不安, 也就是一个任务需要完成而已. 倒是我想着后面等我更熟悉这些流程之后, 想轮换着看看所有的面试环节, 这样对自己后面有更大帮助.
旗亭画壁
这是我在一本唐诗集里读到的故事, 一时手痒, 翻译成了现代汉语, 略有一点点发挥, 主要是让整个故事能上口, 读起来顺畅. 原文可以参考wikipedia. 故事名字我解释一下, 旗亭是酒楼的意思, 画壁是指在墙上画.
话说唐朝开元年间, 王昌龄, 高适和王之涣齐名, 三个人都还没当上大官, 经常一起在外面喝酒作乐. 有那么一晚, 天寒微雪, 三个人来到一家酒楼, 上二楼, 买了酒, 靠着炉子, 边喝边聊. 不久之后, 有十几个带着乐器的乐师上楼聚会. 三位诗人就躲到角落里, 隔着火炉边喝边看. 又不久后, 有四个衣着华丽, 面容姣美的歌姬也上楼和乐师们聚到了一起. 接下来, 乐师们开始演奏, 歌姬们开始依次唱歌, 唱的都是当时的名曲.
三个诗人就开始较劲, 说, 我们的诗都还挺有名气, 喜欢的人也不少, 今天我们就来排个座次. 我们就听这些歌姬的, 谁的诗被唱的次数最多, 谁就是老大. 商定之后不久, 一个歌姬就开始唱: 寒雨连江夜入吴, 平明送客楚山孤. 洛阳亲友如相问, 一片冰心在玉壶. 王昌龄很高兴, 手蘸着酒, 在墙上划了一道, 说, 我的一个绝句. 又一个歌姬唱到: 开箧泪沾臆, 见君前日书. 夜台何寂寞, 犹是子云居. 高适很高兴, 也伸手在墙上画了一道, 说, 我有一首. 下一首又是王昌龄, 王很得意, 说, 我两首了, 说着又在墙上画了一笔.
旁边的王之涣就有点不开心了, 说, 这些都是三流歌姬, 哪能算数. 于是指着歌姬中长得最美貌的, 说, 我们来等这个人唱, 如果她唱的不是我的诗, 我这辈子都不跟你们争了, 认栽! 但如果是我的诗, 你们俩得在我面前跪着叫老师. 最美的那个歌姬过了许久才开始唱, 唱的正是凉州词: 黄河远上白云间, 一片孤城万仞山. 羌笛何须怨杨柳, 春风不度玉门关. 王之涣赌中了, 揶揄另外两位, 说: 你们两个乡巴佬知道我厉害了吧? 三个人一起大笑着, 热闹得很. 那些歌姬听着喧笑, 就好奇地过来问候, 不知三人为何如此开怀. 三个人就把刚才的打赌一五一十地告诉了她们. 歌姬们赶紧下拜, 说: 我们俗人不认识神仙一般的才子, 请您们屈尊降贵, 到我们的席位上来. 三个人答应了, 当天大醉方归.
via 年华转瞬
所读所观所玩
读书来说, 读完了六本, 都是在微信读书上读完的, 30天阅读挑战通过后开始尝试365天的挑战. 按时间顺序, 首先是葛亮的汉字再发现, 这本书写得很不像我知道的葛亮, 完全就是一个学术论文的合集. 而这本书最大的问题在于不确定性, 我们只能推测而没有办法令人完全信服地证明这些字形变迁的源流. 当然, 文史类的研究大都也没法像科学一样真正得到确定性和可证伪的结论. 第二本是数据产品经理的自我修养, 这本书里做广告推荐那部分很有意思, 虽然现在对我一点用都没有, 但是有很多血泪教训. 接下来是很水的一本Deepseek辅助网文写作实践手册, 感觉最多可以骗骗小白, 对于已经高强度使用LLM好久的我而言, 这本完全是在说废话. 再往后是一本很有趣的书, 沃顿商学院时间管理课, 这本的书名让你感觉有权威背书, 里面的一些idea也都是挺好的, 但是我怀疑里面所有的故事都是编出来的, 而不是基于事实的. 然后是本月最佳的李飞飞自传, 我看见的世界. 她年轻时求学的经历挺值得一读, 但是后面做ImageNet的经历就让我感觉是恰逢其会了. 最后一本是做对产品, 这本虽然不是本月最佳, 但是对我来说可能是最有价值的一本, 因为里面给出了很详尽地如何验证产品的例子. 要点就是, 要想一个好的主意, 找到真正的用户, 看他们是否会愿意真金白银地买单.
没怎么看电影, 整理收藏的时候下载了邪不压正, 跳着看完了, 不算很好.
游戏玩了丝之歌, 很是顺滑, 不过难度相对于空洞骑士有明显地增加, 雪山拿二段跳花了我一整晚. 总体评价是很值得玩, 各种细节, 各种动画, 都对得起这几年的等待. 另外, 还关注了一下TI的决赛, 又输了, 而且Dota这个游戏让我觉得越来越陌生. 也许是时候说再见了. 另外, Good Sudoku最高难度的Eternal模式通了100关, 然后我觉得数独没什么好玩的了, 就删了游戏.
面试
这个月开始了在Canva的面试工作. 之前的工作中, 在大部分公司都有参与过面试和决策的过程. 在Canva面试的感受不太一样, 首先是有一个相对比较完善的题库, 很方便面试官上手. 然后是面试的过程分得很细, 编程语言, 技术沟通, 系统设计等等分得很开, 但是这个问题是, 很多时候面试考察的点是没有办法完全区分开的. 比如我参与过的一个技术评审能力和技术沟通能力的面试, 实际上就需要面试者对系统设计, 任务切分等等有比较深厚的基础, 更不用提要能读懂Pull Request所需要的编程语言能力了.
下一次reverse shadow后就会独立开始面试了, 没啥忐忑不安, 也就是一个任务需要完成而已. 倒是我想着后面等我更熟悉这些流程之后, 想轮换着看看所有的面试环节, 这样对自己后面有更大帮助.
旗亭画壁
这是我在一本唐诗集里读到的故事, 一时手痒, 翻译成了现代汉语, 略有一点点发挥, 主要是让整个故事能上口, 读起来顺畅. 原文可以参考wikipedia. 故事名字我解释一下, 旗亭是酒楼的意思, 画壁是指在墙上画.
话说唐朝开元年间, 王昌龄, 高适和王之涣齐名, 三个人都还没当上大官, 经常一起在外面喝酒作乐. 有那么一晚, 天寒微雪, 三个人来到一家酒楼, 上二楼, 买了酒, 靠着炉子, 边喝边聊. 不久之后, 有十几个带着乐器的乐师上楼聚会. 三位诗人就躲到角落里, 隔着火炉边喝边看. 又不久后, 有四个衣着华丽, 面容姣美的歌姬也上楼和乐师们聚到了一起. 接下来, 乐师们开始演奏, 歌姬们开始依次唱歌, 唱的都是当时的名曲.
三个诗人就开始较劲, 说, 我们的诗都还挺有名气, 喜欢的人也不少, 今天我们就来排个座次. 我们就听这些歌姬的, 谁的诗被唱的次数最多, 谁就是老大. 商定之后不久, 一个歌姬就开始唱: 寒雨连江夜入吴, 平明送客楚山孤. 洛阳亲友如相问, 一片冰心在玉壶. 王昌龄很高兴, 手蘸着酒, 在墙上划了一道, 说, 我的一个绝句. 又一个歌姬唱到: 开箧泪沾臆, 见君前日书. 夜台何寂寞, 犹是子云居. 高适很高兴, 也伸手在墙上画了一道, 说, 我有一首. 下一首又是王昌龄, 王很得意, 说, 我两首了, 说着又在墙上画了一笔.
旁边的王之涣就有点不开心了, 说, 这些都是三流歌姬, 哪能算数. 于是指着歌姬中长得最美貌的, 说, 我们来等这个人唱, 如果她唱的不是我的诗, 我这辈子都不跟你们争了, 认栽! 但如果是我的诗, 你们俩得在我面前跪着叫老师. 最美的那个歌姬过了许久才开始唱, 唱的正是凉州词: 黄河远上白云间, 一片孤城万仞山. 羌笛何须怨杨柳, 春风不度玉门关. 王之涣赌中了, 揶揄另外两位, 说: 你们两个乡巴佬知道我厉害了吧? 三个人一起大笑着, 热闹得很. 那些歌姬听着喧笑, 就好奇地过来问候, 不知三人为何如此开怀. 三个人就把刚才的打赌一五一十地告诉了她们. 歌姬们赶紧下拜, 说: 我们俗人不认识神仙一般的才子, 请您们屈尊降贵, 到我们的席位上来. 三个人答应了, 当天大醉方归.
via 年华转瞬
香港银行卡开户完整指南(2025年9月最新)
2025年9月最新香港银行卡线上开户攻略,涵盖汇丰银行、中银香港和ZA Bank的完整流程、必备材料、注意事项与避坑经验,助你高效完成开户。
via Mengke's blog - Mengke's coding journey (author: me@mengke.me (Mengke))
2025年9月最新香港银行卡线上开户攻略,涵盖汇丰银行、中银香港和ZA Bank的完整流程、必备材料、注意事项与避坑经验,助你高效完成开户。
via Mengke's blog - Mengke's coding journey (author: me@mengke.me (Mengke))
近思录 2025-09-03
清华简·厚父
🪖
社会物理学
https://www.bilibili.com/video/BV1sAhrznEXJ
教授真是物理达人呵。
雾凇拼音
还可以加上大语言模型。我用了一下,长句有提升,如果是传统的用词输入,没帮助。
https://www.ctrlife.cn/posts/Technology/Rime+雾凇拼音+万象大模型的全平台输入方案
Binary Ninja
公众号看来的。不太关注这些,已经落伍啦。
纯前端的图像超分辨率
https://linux.do/t/topic/64061
https://cappuccino.moe/
LINUX DO论坛有好多有趣的项目。
各种个人博客
https://linux.do/t/topic/878846/3
有趣的灵魂。
Charlie Kirk and Erika Kirk
https://www.youtube.com/watch?v=JJyUV3t5310
via M-x Chris-An-Emacser
清华简·厚父
🪖
– Salute to you, comrades!
– Hail to you, chairman!
– Comrades, thanks for your hard work!
– Serve the people!阅兵口号的英文翻译
社会物理学
https://www.bilibili.com/video/BV1sAhrznEXJ
教授真是物理达人呵。
雾凇拼音
还可以加上大语言模型。我用了一下,长句有提升,如果是传统的用词输入,没帮助。
https://www.ctrlife.cn/posts/Technology/Rime+雾凇拼音+万象大模型的全平台输入方案
Binary Ninja
公众号看来的。不太关注这些,已经落伍啦。
纯前端的图像超分辨率
https://linux.do/t/topic/64061
https://cappuccino.moe/
LINUX DO论坛有好多有趣的项目。
各种个人博客
https://linux.do/t/topic/878846/3
有趣的灵魂。
Charlie Kirk and Erika Kirk
https://www.youtube.com/watch?v=JJyUV3t5310
Also I heard the voice of the Lord, saying, Whom shall I send, and who will go for us? Then said I, Here am I; send me.Isaiah 6:8,biblehub.com/kjv/isaiah/6.htm
via M-x Chris-An-Emacser
升级到 macOS Tahoe 26 没有启动台?用 LaunchNext 实现在 macOS26 中使用启动台!
这篇文章介绍了macOS Tahoe 26 移除原有启动台功能后,第三方工具 LaunchNext 的解决方案。LaunchNext 可自动导入并迁移系统启动台数据,保留用户原先整理的应用顺序和文件夹结构,大大减少适应成本。其安装方式简单,只需解压并拖入应用程序文件夹即可,首次启动稍慢但能顺利完成数据读取。除数据迁移外,LaunchNext 还提供外观和自定义设置,满足个性化需求。目前该应用仍在快速迭代中,对升级到 macOS 26 却依赖启动台的用户来说是一个值得尝试的替代方案。
via 张洪Heo
这篇文章介绍了macOS Tahoe 26 移除原有启动台功能后,第三方工具 LaunchNext 的解决方案。LaunchNext 可自动导入并迁移系统启动台数据,保留用户原先整理的应用顺序和文件夹结构,大大减少适应成本。其安装方式简单,只需解压并拖入应用程序文件夹即可,首次启动稍慢但能顺利完成数据读取。除数据迁移外,LaunchNext 还提供外观和自定义设置,满足个性化需求。目前该应用仍在快速迭代中,对升级到 macOS 26 却依赖启动台的用户来说是一个值得尝试的替代方案。
via 张洪Heo
岭回归和 Lasso回归
本文深入探讨了岭回归(Ridge Regression)与Lasso回归(Lasso Regression),这两种旨在解决线性回归中多重共线性问题的关键技术。文章阐述了它们共同的核心思想,即通过向损失函数添加正则化惩罚项来防止模型过拟合。重点对比了两者的不同之处:岭回归采用L2正则化,通过收缩系数来稳定模型,但会保留所有特征;而Lasso回归则采用L1正则化,它不仅能解决共线性问题,还能将不重要的特征系数压缩至零,从而实现自动化的特征选择,使模型更加简洁高效。
via Maxwell_Leiの小窝
本文深入探讨了岭回归(Ridge Regression)与Lasso回归(Lasso Regression),这两种旨在解决线性回归中多重共线性问题的关键技术。文章阐述了它们共同的核心思想,即通过向损失函数添加正则化惩罚项来防止模型过拟合。重点对比了两者的不同之处:岭回归采用L2正则化,通过收缩系数来稳定模型,但会保留所有特征;而Lasso回归则采用L1正则化,它不仅能解决共线性问题,还能将不重要的特征系数压缩至零,从而实现自动化的特征选择,使模型更加简洁高效。
via Maxwell_Leiの小窝
大数据成矿预测系列(一) | 经典模型“证据权重法”的前世今生
本文作为“大数据成矿预测”系列的首篇,系统回顾了数据驱动方法中的经典模型——证据权重法(Weights of Evidence)。文章追溯了该方法从医学诊断跨界应用于地质勘查的演进历程,阐明了其如何将传统的、依赖专家经验的定性叠图分析,转变为一种基于贝叶斯统计的、客观且可复现的定量预测范式。通过对数据准备、权重计算、独立性检验及后验概率生成等核心步骤的详细拆解与实例说明,本文旨在帮助读者深入理解证据权重法的原理与实践,为掌握现代成矿预测技术奠定坚实基础。
via Maxwell_Leiの小窝
本文作为“大数据成矿预测”系列的首篇,系统回顾了数据驱动方法中的经典模型——证据权重法(Weights of Evidence)。文章追溯了该方法从医学诊断跨界应用于地质勘查的演进历程,阐明了其如何将传统的、依赖专家经验的定性叠图分析,转变为一种基于贝叶斯统计的、客观且可复现的定量预测范式。通过对数据准备、权重计算、独立性检验及后验概率生成等核心步骤的详细拆解与实例说明,本文旨在帮助读者深入理解证据权重法的原理与实践,为掌握现代成矿预测技术奠定坚实基础。
via Maxwell_Leiの小窝
20250924
周三了才有机会摆弄我的新唱片。这张板桥文夫的《渡良濑》,是强哥从声音方程式明辉老师的收藏里买来给我的生日礼物,昨天刚到。渡良濑是日本的渡良瀬川,也是板桥文夫的代表作。这张唱片全部曲目就是把板桥文夫多年来的不同现场与录音室版本汇集到一起。也许渡良瀬川就是封面图里的这条河吧,有点浪漫。
看介绍,其中有一个版本是 2014 年录制于新宿 Pit Inn 现场。因为好奇这个叫 Pit 的旅店有什么特殊,于是问了问 ChatGPT,原来这是最初开业于 1965 年,日本最老牌、最有代表性的爵士俱乐部之一,就在我刚去过的新宿御苑附近。小红书一搜,出来的居然是它开业 60 周年纪念音乐会即将到来,就在年底,还能买票!日本爵士界我听过的不多的名字基本都出现在了演出阵容里,山下洋辅、渡边贞夫、菊地成孔、大友良英、板桥文夫、森山威男、峰厚介...... 去不去不去不去呢?
最近开始读第二本库切的书《青春》。作为自传三部曲,他已经不再是《童年》里的小朋友,长大,走向社会,从南非来到了伦敦,开始在 IBM 做程序员,但内心觉得自己是艺术家,是诗人,想和家庭和非洲切割。他的内心挣扎我好像也有过,或者现在还遗留着。那么我已经期待他的第三本了,按这个趋势,那一定是他下一个人生阶段的故事,也许我可以从那里寻找到什么。
今天认真写了代码。
via 61’s life
周三了才有机会摆弄我的新唱片。这张板桥文夫的《渡良濑》,是强哥从声音方程式明辉老师的收藏里买来给我的生日礼物,昨天刚到。渡良濑是日本的渡良瀬川,也是板桥文夫的代表作。这张唱片全部曲目就是把板桥文夫多年来的不同现场与录音室版本汇集到一起。也许渡良瀬川就是封面图里的这条河吧,有点浪漫。
看介绍,其中有一个版本是 2014 年录制于新宿 Pit Inn 现场。因为好奇这个叫 Pit 的旅店有什么特殊,于是问了问 ChatGPT,原来这是最初开业于 1965 年,日本最老牌、最有代表性的爵士俱乐部之一,就在我刚去过的新宿御苑附近。小红书一搜,出来的居然是它开业 60 周年纪念音乐会即将到来,就在年底,还能买票!日本爵士界我听过的不多的名字基本都出现在了演出阵容里,山下洋辅、渡边贞夫、菊地成孔、大友良英、板桥文夫、森山威男、峰厚介...... 去不去不去不去呢?
最近开始读第二本库切的书《青春》。作为自传三部曲,他已经不再是《童年》里的小朋友,长大,走向社会,从南非来到了伦敦,开始在 IBM 做程序员,但内心觉得自己是艺术家,是诗人,想和家庭和非洲切割。他的内心挣扎我好像也有过,或者现在还遗留着。那么我已经期待他的第三本了,按这个趋势,那一定是他下一个人生阶段的故事,也许我可以从那里寻找到什么。
今天认真写了代码。
via 61’s life
玩游戏的隐藏buff:超市水果要先称重
这次去欧洲旅游,我经常会去当地超市买东西。在意大利的时候,我成了整个团里面唯一知道结账前需要自己给水果称重、贴价格标签的。(收银员自己也需要回到特定称上称重)这真的是玩游戏的意外收获。。。我在玩游戏的时候就一直吐槽,玩家需要专门聘请一位客户专员,专门就是帮客人称水果,解决自动结账机的故障,当时我就想,哪有这样的超市!结果现实啪啪打脸。。。我不仅遇到水果称重的情况,还遇到了自动结账机故障。。。(游戏来源于生活)
我刚好就在出发的前几周开始玩Supermarket Simulator(超市模拟器),这是PC端的游戏。就是让玩家经营一家本地小超市,从货架摆设到招聘员工,还有刷墙开灯,存钱弄仓库。每天一睁眼就是备货理货,是一款做工感特别强但是很有满足感的游戏。
收银员的站姿是真的丧。。。
里面有送货的要求,不知不觉我就把里面的商品名称都背下来了。。。里面经常看到‘Bio’这个字样。结果在意大利和法国经常看到鸡蛋和牛奶上面就写着大大的‘Bio’。回来查资料才发现是欧洲那边,标识:“有机”产品的意思。
有点莫名地像纽约的街区
法国农夫市场里面经常能看到写着“bio”的鸡蛋。。。。
有机产品。。。
左边是游戏里面的产品,右边是法国超市里面能找到的近似产品:
法国那边的超市周日很多都会关门,难得去了一家不关门的,结果结账的工作人员都不在!只有一个可怜兮兮的员工专门负责解除自动收银机的故障。。。我玩游戏的时候觉得:真扯,现实中怎么可能有这么容易坏掉的机器。。。我居然要一台机器配合一个客户专员。。。结果当天。。。我扫描东西的时候直接给我扫描成两个,机器特别灵敏。工作人员一边打电话,一边帮助不懂的人扫码结账。电话里面的人远程登录到我的那台机器,然后看到他在输入密码,手动改正了我的产品数量。。。。
就是想不到玩游戏还能增加生活经验。。。
via Cosmos的博客
这次去欧洲旅游,我经常会去当地超市买东西。在意大利的时候,我成了整个团里面唯一知道结账前需要自己给水果称重、贴价格标签的。(收银员自己也需要回到特定称上称重)这真的是玩游戏的意外收获。。。我在玩游戏的时候就一直吐槽,玩家需要专门聘请一位客户专员,专门就是帮客人称水果,解决自动结账机的故障,当时我就想,哪有这样的超市!结果现实啪啪打脸。。。我不仅遇到水果称重的情况,还遇到了自动结账机故障。。。(游戏来源于生活)
我刚好就在出发的前几周开始玩Supermarket Simulator(超市模拟器),这是PC端的游戏。就是让玩家经营一家本地小超市,从货架摆设到招聘员工,还有刷墙开灯,存钱弄仓库。每天一睁眼就是备货理货,是一款做工感特别强但是很有满足感的游戏。
收银员的站姿是真的丧。。。
里面有送货的要求,不知不觉我就把里面的商品名称都背下来了。。。里面经常看到‘Bio’这个字样。结果在意大利和法国经常看到鸡蛋和牛奶上面就写着大大的‘Bio’。回来查资料才发现是欧洲那边,标识:“有机”产品的意思。
有点莫名地像纽约的街区
法国农夫市场里面经常能看到写着“bio”的鸡蛋。。。。
有机产品。。。
左边是游戏里面的产品,右边是法国超市里面能找到的近似产品:
法国那边的超市周日很多都会关门,难得去了一家不关门的,结果结账的工作人员都不在!只有一个可怜兮兮的员工专门负责解除自动收银机的故障。。。我玩游戏的时候觉得:真扯,现实中怎么可能有这么容易坏掉的机器。。。我居然要一台机器配合一个客户专员。。。结果当天。。。我扫描东西的时候直接给我扫描成两个,机器特别灵敏。工作人员一边打电话,一边帮助不懂的人扫码结账。电话里面的人远程登录到我的那台机器,然后看到他在输入密码,手动改正了我的产品数量。。。。
就是想不到玩游戏还能增加生活经验。。。
via Cosmos的博客
使用 grep 查找关键字并显示上下文行
背景
排查日志时,常需要定位关键字并带上一两行上下文确认语义。
快速示例
假设想在
●
●
输出中,命中的行以冒号分隔行号与内容,上下文行则以短横线
控制上下文范围
●
●
●
例如只关心关键字后面的调用栈,可使用:
再配合
与常见参数组合
●
●
●
将这些参数组合成 Shell 函数,后续排查直接调用。例如在
执行
小结
●
● 搭配
● 如果命中结果过多,将命令与
via 技术小黑屋
背景
排查日志时,常需要定位关键字并带上一两行上下文确认语义。
grep 内建的上下文选项可以直接满足需求,不必再手动 sed -n '19,21p'。快速示例
假设想在
app.log 中找出包含 Fatal error 的行,并且同时看到上一行与下一行:1
grep -n -C 1 "Fatal error" app.log
●
-n 会显示行号,便于定位。●
-C 1 等价于 --context=1,表示向前向后各多带 1 行。想多看几行时调整数字即可。输出中,命中的行以冒号分隔行号与内容,上下文行则以短横线
- 连接,快速区分重点。控制上下文范围
grep 提供三个粒度化参数:●
-C <N>:两侧各 N 行,是最常用的形式。●
-B <N>:只带前 N 行(Before)。●
-A <N>:只带后 N 行(After)。例如只关心关键字后面的调用栈,可使用:
1
grep -n -A 4 "NullPointerException" stacktrace.txt
再配合
-m 1(匹配一次后退出)可以缩短复杂日志的搜索时间。与常见参数组合
●
-i:忽略大小写,处理大小写不一致的告警信息很方便。●
-E:启用扩展正则,可直接写 grep -E "(WARN|ERROR)"。●
--color=auto:高亮命中关键字,在终端阅读更直观。将这些参数组合成 Shell 函数,后续排查直接调用。例如在
~/.bashrc 中定义:1
2
3
4
gctx() {
local keyword="$1" file="$2" lines="${3:-1}"
grep -n --color=always -C "$lines" "$keyword" "$file"
}执行
gctx "timeout" service.log 2,即可得到行号、关键字高亮、上下文行的结果。小结
●
-C/-A/-B 是获取上下文的核心选项,记住数字表示行数即可。● 搭配
-n、--color、-m 等参数可以提升排查效率。● 如果命中结果过多,将命令与
less -R 或 fzf 管道组合,能够在终端中进行二次筛选,让排查体验更顺滑。via 技术小黑屋
PostgreSQL 18 正式发布!
PostgreSQL 18通过全新I/O子系统提升了各类规模工作负载的性能,其从存储设备读取数据时性能最高可提升3倍,同时扩大了可使用索引的查询范围。本次发布显著降低了主版本升级的干扰性,不仅加速升级过程,更缩短了升级后达到预期性能所需的时间。
via TecHug (author: techug)
PostgreSQL 18通过全新I/O子系统提升了各类规模工作负载的性能,其从存储设备读取数据时性能最高可提升3倍,同时扩大了可使用索引的查询范围。本次发布显著降低了主版本升级的干扰性,不仅加速升级过程,更缩短了升级后达到预期性能所需的时间。
via TecHug (author: techug)
Postgres 18:RETURNING子句中的OLD和NEW行
本次发布新增功能:在INSERT、UPDATE、DELETE和MERGE命令的RETURNING子句中,可同时访问旧值(OLD)和新值(NEW)。
via TecHug (author: techug)
本次发布新增功能:在INSERT、UPDATE、DELETE和MERGE命令的RETURNING子句中,可同时访问旧值(OLD)和新值(NEW)。
via TecHug (author: techug)