公司内网服务器(称作 hostA
)访问外网速度特别慢,以至于使用 Linuxbrew 安装工具特别费事。经测试,下载同样的内容,处于办公网络的本机(称作 hostB
)下载很快。遂起了代理加速的心思。
以下是解法。
公司内网服务器(称作 hostA
)访问外网速度特别慢,以至于使用 Linuxbrew 安装工具特别费事。经测试,下载同样的内容,处于办公网络的本机(称作 hostB
)下载很快。遂起了代理加速的心思。
以下是解法。
最近在实际业务中,我遇到了这样一类问题。
首先,我们定义了一个通用类,比如 message Feature
。然后,在一个大的特征分组中,我们定义了若干个特征。比如
1 | message FooGroup { |
但在实际使用中,我们需要根据配置文件,有筛选地选出其中的某几个来使用——比如选择使用 foo
和 baz
。为此,我们会传递 "foo"
和 "baz"
给函数 get_feature
,并期待它能返回 const Feature&
,分别装着 foo
和 baz
的常量引用。
查阅 Protobuf 的文档之后发现,使用描述器(Descriptor)、字段描述器(FieldDescriptor)和反射(Reflection)来实现该功能。
为了分析服务性能瓶颈,今次我们计划用 gperftools 当中的 CPU Profiler 来打印服务当中的性能热点。按官网介绍,以下三种方式之一,可开启 CPU Profiler。
LD_PRELOAD
环境变量加载 CPU Profiler 的共享对象(动态库)。例如 env LD_PRELOAD="/usr/lib/libprofiler.so" /path/to/elf_bin
。-lprofiler
(或者 -ltcmalloc_and_profiler
,如果还需要 TCMalloc 的话),而后在运行时通过 env CPUPROFILE=foo.prof /path/to/elf_bin
将性能分析文件写入 foo.prof
。-lprofiler
的基础上,在代码内引入头文件 #include <gperftools/profiler.h>
,而后在需要分析性能的代码块前后加上 ProfilerStart("/path/to/foo.prof")
及 ProfilerStop()
。这里 (1) 不需要重新编译,但是一看就很山寨;(3) 在分析特定代码片块的性能时很有效,但在意图分析整个程序的性能时就很鸡肋。目光集中在 (2) 上面。
尝试 (2) 时,遇到一个问题。不管如何设置 CPUPROFILE
,程序都不会将性能分析文件转储出来。
描述去世之人去世时的阳寿有「得年」、「享年」、「享寿」三种相对文雅的说法。其中
台湾所谓「教育部」之字典的「享寿」词条里提到用法:「習慣上稱卒年六十以上者為『享壽』,不滿六十者稱『享年』,三十以下者稱『得年』。」可为参考。
不过,随着现代人均寿命增加,私以为:卒年四十五以下称得年都不会突兀;卒年七十五以上恐怕称享寿才较为妥帖;若是卒年过百,恐怕得尊称一声「享高寿」了。