strace是一个在类Unix操作系统如Linux上做debugging和trouble shooting的超级好用的工具。它可以捕获和记录进程的所有系统调用,以及这个进程接收的所有信号。
原文: 10 Strace Commands for Troubleshooting and Debugging Linux Processes
strace是一个在类Unix操作系统如Linux上做debugging和trouble shooting的超级好用的工具。它可以捕获和记录进程的所有系统调用,以及这个进程接收的所有信号。
原文: 10 Strace Commands for Troubleshooting and Debugging Linux Processes
以一台Linux服务器为例。这台Linux包括两颗Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz
CPU, 单颗CPU包括 10 个 cpu core, 使用超线程包含20个逻辑cpu core, 具体的官方介绍: E5-2630 V4。
下面让我们通过Linux的命令来查找对应的参数,看看是否符合官方的介绍, 主要是查看/proc/cpuinfo
的信息获得。
如果你用SS FQ的话, Shadow-Socks设置的系统代理是socks5代理,在iTerm中访问一些https还是不能用, 比如用go get
下载一些依赖的库。一个办法就是使用Privoxy将socks5代理转换成http代理。
MacOS安装Privoxy比较简单。
|
|
你可以使用brew services start privoxy
启动privoxy服务,或者手工临时启动privoxy /usr/local/etc/privoxy/config
也可以。
如果中间需要brew link privoxy
按照提示创建文件夹,比如/usr/local/sbin
,设置对应的权限即可。
启动服务前先编辑vim /usr/local/etc/privoxy/config
|
|
8087
是本机要监听的http代理地址, 1080
是SS的socks5代理地址,还设置本地地址。
通过下面的环境变量就可以设置http代理。
|
|
你可以把它们写在 ~/.zshrc
或者 ~/.bash_profile
中,随时切换。
|
|
参考
最近在做Docker镜像的时候发现镜像文件非常大,需要找出程序的依赖库,减少程序的大小,所以整理了一下相关的工具。基本上这些工具都在GNU Binutils中。
GNU Binary Utilities或binutils是一整套的编程语言工具程序,用来处理许多格式的目标文件。当前的版本原本由在Cygnus Solutions的程序员以Binary File Descriptor library(libbfd)所撰写。这个工具程序通常搭配GCC、make、和GDB这些程序来使用。
它包含20个左右的工具,本文介绍了我在创建Docker镜像的时候的使用的几种工具。
ldd不是GNU Binutils工具集中的一个工具,但是却是一个非常有用的工具, 它可以显示程序或者共享库所需的共享库。
例如:
|
|
依照ldd得手册, 有时候ldd会通过执行程序来获取依赖信息,对于来源不明的程序,执行这些程序可能会带来风险,所以对于来源不明的程序,可以使用objdump
来分析。
onjdump可以显示目标文件的信息,可以通过参数控制要显示的内容。
比如-p
可以显示文件头内容, 通过grep
可以查看依赖的库。
|
|
甚至可以查看-T
可以查看动态符号表的内容:
|
|
nm显示目标文件的符号。
|
|
strings显示文件中的可打印字符。
|
|
通过上面的工具,可以分析出文件的依赖库,创建Docker镜像的时候只需把所需的依赖库加进去即可。
如果程序本身比较大,可以将程序压缩,去掉不需要的一些数据, 比如使用strip
进行裁剪。
你可以通过参数控制要丢掉的哪些符号。
比如去除符号表和行号信息:
|
|
Linux下的GNU Libtool是一种属于GNU建构系统的GNU程序设计工具,用来产生便携式的库。这里引用libtool手册的说明:
|
|
MacOS下的libtool时另外一个工具,可以用来创建库:
|
|
可以对静态库做创建、修改和提取的操作。
|
|
比nm更强大,mac还有一个对应的图形化工具——MachOView。
查看依赖动态库:
|
|
查看反汇编代码段:
|
|
最近需要将一个项目的master分支用另一个分支完全替换, 查找了相关资料,最后追溯到stackoverflow上的一个提问: How to replace master branch in git, entirely, from another branch?。
网友给出了两种方案。
假设需要将seotweaks
分支替换成master
。
1、
|
|
-s ours
是--strategy=ours
的简写。
2、
如果上面的操作有问题, 还可以使用下面这个方法:
|
|
-m
用来重命名分支。
This might remove commits in origin master。
备用,不解释
1、 首先安装 polipo, 设置parent proxy to Ss:
|
|
macosx运行
|
|
设置全局http proxy:
|
|
对于git:
|
|
|
|
Mac OSX中虽然带了 netstat
工具,可是用起来不像Linux下那么爽, 一个是慢 (netstat -p tcp | grep $PORT
),二是不能pid,所以stackoverflow上建议使用lsof
工具。
所以你可以使用下面的命令:
|
|
为了不显示端口的俗称,你可以加P
参数:
|
|
如果不想grep Listen
,可以加-sTCP:LISTEN
。
没有更多要说的了,谨记一下备用。
利用Nginx很容易的配置反向代理和负载均衡的服务, 比如下面的配置:
|
|
它将客户端的请求转发给后台的三个服务器。 负载均衡的算法又多种, 比如轮询、least_conn、ip_hash、weight等算法,本文重点不介绍这方面的内容,而是下面的需求。
后端服务器可能返回 3XX的redirect的response, Nginx会把这个请求直接返回给客户端。现在我们的需求是让Nginx自己处理这个跳转,而客户端无感知。