分析运行中的 Python 进程

在 Java 中打印当前线程的方法栈,可以用 kill -3 命令向 JVM 发送一个 OS 信号,JVM 捕捉以后会自动 dump 出来;当然,也可以直接使用 jstack 工具完成,这些方法好几年前我在 这篇性能分析的文章 中介绍过。这样的需求可以说很常见,比如定位死锁,定位一个不工作的线程到底卡在哪里,或者定位为什么 CPU 居高不下等等问题。

现在工作中我用的是 Python,需要线上问题定位的缘故,也有了类似的需求——想要知道当前的 Python 进程“在干什么”。但是没有了 JVM 的加持,原有的命令或者工具都不再适用。传统的 gdb 的 debug 大法在线上也不好操作。于是我寻找了一些别的方法,来帮助定位问题,我把它们记录 [……] 阅读全文

从 Mac 下的包管理和安装工具说起

先说点别的。

可能很多人和我一样,最开始习惯使用的是 Windows,后来开始接触 Linux,再后来,接触到 Mac,几周以后,一发不可收拾。

如果说,在 Windows 下面,基本上习惯了便捷友好的图形化界面,以及经历了对“系统在干什么”一无所知的恐惧之后,那么接下来 Linux 就带来了另一个极端的体验,知道系统在做什么,但是总是觉得不那么便捷而友好(刚开始很长一段时间都没有接触 Linux 图形界面)。我记得大致有这么一句话,“Linux is user friendly, but it is selective who its friends are.”,Linux 也是对用户朋友友好的,只 [……] 阅读全文

接触 Python 后的一点感受记录

python最近因为工作的关系开始学习 Python 了。以前从不曾正儿八经地学过,如果说工作学习经验带来改变的话,那么编程语言的学习就是个很好的例子。如果在十年前,我要学习 Python 的话大概会买本系统介绍的 Python 教程,然后一页一页慢慢看,估计能够啃完大半本,跳过一些自认为次要的特性。等到在项目中使用已经得是一两个月之后了吧。但是如今我显然不太会做一样的事情,我现在会拿着我那些熟悉的编程语言来比较,不同的特性上面,Python 是怎样的,是先进还是落后,适合解决什么问题,在哪些领域可以大行其道,但在遇到哪些问题的时候事倍功半。

想起以前接触过的编程语言里,事实上有一半都不能算系统地学过,大致上只是 [……] 阅读全文

一段集合操作的不同语言表达

看到 这样一条微博 ,觉得挺有意思,就记录在这里:

所谓对比,Java 真是足够啰嗦:

weibo

图不清楚,我来再叙述一下。要做的事情就是,把原有列表里面的每个元素都变成大写的,再放到一个新列表里面去。

这是 Java7 的版本: 

List list = Arrays.asList("andy", "michael", "thomas");
List list2 = new ArrayList<>();
for(String s : list)
	list2.add(s.toUpperCase());

 这是 Java8 的版本(移步阅读:《Java8 集合中的 Lambda 表达

[……]阅读全文

back to top