系统
gdb
gdb跟踪zlib库
- 编译debug版本
- 链到编译的库
- gdb -derictory 指定目录
gdb打印jemalloc输出信息
set scheduler-locking on
<pre>
export LD_PRELOAD=/home/canfang.scf/libjemalloc.so.2
</pre>
gdb 调试
set scheduler-locking off|on|step
set logging on xx.log/off
set pagination off
thread find xxx
thread xx
gcore
vim
vim替换
:s/yeti\/mysql/yeti\/workspace\/mysql/g 替换当前行所有的 :%s/yeti\/mysql/yeti\/workspace\/mysql/g 替换每一行
vim删除空行
:g/^$/d
去除重复行
sort file | uniq
处理字符串
:%s/// 删除后10个字符
git
git clean
git clean -nxfd
git clean -nf
git clean -nfd
git别名
git config --global alias.st status
显示提交信息:
git config --add remote.origin.fetch refs/notes/review:refs/notes/review
git fetch
git config --global alias.lg 'log --show-notes=review'
others
iostat
iostat -dxm 1 10
iostat -xm 1
mac install
sudo pip install requests
修改文件所属权限
sudo chown -R canfang.scf:users yeti sudo chmod a=rwx corefiles all
拷贝忽略某些目录
ls | grep -v "排除目录" | xargs -i cp -a {} "目标目录"
grep -r --exclude="*.o" "gcov" .
--exclude-dir=
为yeti.scf创建软链接
ln -sv /u01/my3306/yeti.scf test
查看GLIBC版本
strings /lib64/libc.so.6 | grep GLIBC export LD_PRELOAD=/usr/local/gcc-5.3.0/lib64/libstdc++.so.6.0.21
安装gcc
sudo yum install -b current gcc49.x86_64 装好之后在 /usr/local/gcc-4.9.2 下
offsetof(s,m)
求某个结构体成员在结构体里面的偏移量。
clang-format 格式化代码
- find . -regex ".*.d" | xargs clang-format -i -style=file
- git-clang-format HEAD~1
tar压缩
tar czvf xengine.tar xengine tar -xvf xengine.tar
乱码问题解决
.bashrc中加入 export LC_ALL=en_US.UTF-8 export LANG=en_US.UTF-8 locale 查看字符编码设置情况
gflags
安装使用
cmake .. -DBUILD_SHARED_LIBS=ON
cpu info
<pre>
cpu逻辑个数
cat /proc/cpuinfo | grep "processor" | wc -l
cpu物理个数
cat /proc/cpuinfo | grep "physical id" | sort -u | wc -l
每个物理CPU中Core的个数:
cat /proc/cpuinfo | grep "cpu cores" | uniq | awk -F: '{print $2}'
查看core id的数量,即为所有物理CPU上的core的个数
cat /proc/cpuinfo | grep "core id" | uniq | wc -l
是否为超线程
cat /proc/cpuinfo | grep "siblings
查看某个进程的状态
cat /proc/129434/status
打出进程的线程列表
top -H -p 129434
uptime cpu平均负载
lscpu 查看cpu配额
iostat -txk 1 io状态
https://shift-alt-ctrl.iteye.com/blog/2435140
</pre>
top
- 按cpu的使用率排序,运行top命令后,键入大写P。
- 按内存的使用率排序,运行top命令后,键入大写M。
- top -c 显示完整进程
- top -Hp pid 然后输入 P 依然可以按照 CPU 使用率将线程排序
systemtap
介绍
使用手册
https://spacewander.gitbooks.io/systemtapbeginnersguide_zh/content/2_1_InstallationAndSetup.html
需要安装
- kprobe
- kernel-devel或kernel-smp-devel rpm
find
grep -rin
grep
grep -E "begin to run dump|CK_TEST" Log 查找或
linux系统卡
- 查看内存使用情况
free -g - 查看磁盘使用情况
df -h - 查看磁盘IO使用情况
iostat -x 1
1表示1秒刷新一次
发现最右侧%util很高时,表示IO就很高了,若想看哪个进程占用IO,执行iotop命令查看
4.查看cpu使用情况
top
cpu使用情况,最右侧的%id表示剩余,若很低,则表示cpu被吃完了,在top界面按shift+p对进程使用cpu排序,能看到哪些进程占用cpu较多
crontab 定时任务
安装crontab:yum install crontabs
服务操作说明:
/sbin/service crond start //启动服务
/sbin/service crond stop //关闭服务
/sbin/service crond restart //重启服务
/sbin/service crond reload //重新载入配置
查看crontab服务状态:service crond status
手动启动crontab服务:service crond start
查看crontab服务是否已设置为开机启动,执行命令 ntsysv
加入开机自动启动: chkconfig –level 35 crond on
- cat /etc/crontab
taobao rpm安装包
使用自定义的malloc覆盖系统的
https://yaoguais.github.io/article/jemalloc/start.html
https://stackoverflow.com/questions/262439/create-a-wrapper-function-for-malloc-and-free-in-c
python WEB小型服务器
python -m SimpleHTTPServer 8080
重定向
1>man.log 2>&1
0表示键盘输入 1表示屏幕输出 2表示错误输出
eclipse支持c++11
<pre>
1.eclipse支持c++11
c/c++ general->PreprocessorInclude-> cdt fcc built-in compiler seting
{FLAGS} -E -P -v -dD "${INPUTS}" -std=c++11
2.eclipse Unresolved inclusion: <iostream>
Project > Properties > C/C++ General > Preprocessor Includes… > Providers
并将 “CDT GCC Built-in Compiler Settings”打钩
</pre>
<pre>
symbols and path
/home/canfang.scf/dev/workdir/x-db1/IS/dependency/mysql/include
/usr/local/gcc-5.3.0/include
</pre>
c++11编译
g++ -g -Wall -std=c++11 main.cpp gcc -g -Wall -std=c11 main.cpp
linux查看磁盘信息
tbraid disk
查看缺页
sudo perf record -g -e faults -p pidof mysqld
perf
perf record -p 56259 sleep 10 perf report
perf record -g -p 线程号 或者 perf record -g -a
大概 5 秒钟之后 ctrl + c 中断就可以了,然后 perf report
dmesg
dmesg -T | grep memory
栈变量知识
-fstack-usage -Wstack-usage
https://lark.alipay.com/db_core_team/internal_docs/stack-linux
core文件
sysctl kernel.core_pattern sysctl -w kernel.core_pattern=core cat /proc/sys/kernel/core_pattern sudo sh -c "echo /u01/my3306/corefile/core-%e-%p-%t > /proc/sys/kernel/core_pattern" /u01/corefile -》 不正确!! https://www.fromdual.com/hunting-the-core ulimit -c unlimited
前置条件:确保系统配置的core file size足够,一般设置成unlimited
ulimit -c unlimited
配置corefile的参数:
echo 2 > /proc/sys/fs/suid_dumpable [程序中切换用户,也要产生corefile]
mkdir /tmp/corefiles
chmod 777 /tmp/corefiles
echo "/tmp/corefiles/core">/proc/sys/kernel/core_pattern //配置core文件产生的目录为/tmp/corefiles
echo "1" > /proc/sys/kernel/core_uses_pid
ld_patth
export
man ld.so
批量重命名
for var in
ls
; do mv -f "var" |sed 's/^.../rocks_/'`; done
myfs
sudo yum install t-ais-db-myfs -b current
sudo yum search myfs
查看占用端口号的进程
sudo lsof -i:3306 查看占用端口号的进程
端口号冲突
netstat -anp|grep 11000
扁鹊相关命令
sudo /etc/init.d/bianque status 在 /home/admin/bianque/bin 目录下执行 ./bianque_daemon_server sudo yum install bianque-daemon-server-generic.x86_64
pstack
pt-pmp file.log
grep color
grep -r "log_error_verbosity" . -n --color
mac find
<pre>
find . -name "蝙蝠侠"
找出当前目录以及其所有子目录下所有名字中包含“蝙蝠侠”三字的文件
find . -name "*.rmvb" -maxdepth 1
找出当前目录(不包括子目录)下所有名字中后缀为".rmvb"的文件
</pre>
定时打印jemalloc内存信息脚本
<pre>
largest=70
while :; do
mem=(printf %.0f imem -gt imem
echo date
, $largest >> /tmp/large_mem.log
echo 'p malloc_stats_print(0,0,"a")' | gdb --quiet -nx -p pidof mysqld
fi
sleep 20
done
</pre>
lcov 单测覆盖率
ctest --timeout 30
lcov -b ./ -d ./ -c -o lcov_origin.info --rc lcov_branch_coverage=1
lcov -b ./ -d ./CMakeFiles/xengine.dir/ -c -o lcov_origin.info --rc lcov_branch_coverage=1
genhtml -o result lcov_origin.info
getenv 拿取环境变量的值
pPath = getenv ("PATH");
中文乱码问题
locale -a | grep zh_CN
eclipse问题
构建项目问题:.cproject, .project
eclipse 配色 https://blog.csdn.net/jdbc/article/details/52983914
eclipse 字体 http://www.iteye.com/news/11102-10-great-programming-font
eclipse 字体变大的问题
重启XQuator 或者重装
终端文件
attach to the process in question using gdb, and run:
p dup2(open("/dev/null", 0), 1)
p dup2(open("/dev/null", 0), 2)
detach
quit
ls -l /proc/5636/fd
linux timeout
timeout [选项] 数字[后缀] 命令 [参数]...
timeout 10 command
tar.lz4解压
MTR-mysql-test.tar.lz4
tar -I lz4 -xvf MTR-mysql-test.tar.lz4
sysbench
<pre>
- bulk_insert.lua 批量写入操作
- oltp_delete.lua 写入和删除并行操作
- oltp_insert.lua 纯写入操作
- oltp_point_select.lua 只读操作,条件为唯一索引列
- oltp_read_only.lua 只读操作,包含聚合,去重等操作
- oltp_read_write.lua 读写混合操作,最常用的脚本
- oltp_update_index.lua 更新操作,通过主键进行更新
- oltp_update_non_index.lua 更新操作,不通过索引列
- oltp_write_only.lua 纯写操作,常用脚本,包括insert update delete
- select_random_points.lua 随机集合只读操作,常用脚本,聚集索引列的selete in操作
- select_random_ranges.lua 随机范围只读操作,常用脚本,聚集索引列的selete between操作
</pre>
磁盘
IOPS,即I/O per second,即每秒读写(I/O)操作的次数,多用于OLTP/数据库、小文件存储等场合,衡量随机访问的性能。
事务
XA 就是 X/Open DTP 定义的交易中间件与数据库之间的接口规范(即接口函数),交易中间件用它来通知数据库事务的开始、结束以及提交、回滚等。 XA 接口函数由数据库厂商提供。
sysstat 系统状态
实际上是一个工具箱,这其中包含了好几个工具。它们的介绍如下:
工具 说明
iostat 报告CPU状态,块设备以及分区的IO信息。
mpstat 报告单个核或整体CPU的信息。
pidstat 报告进程,线程的IO,CPU和内存使用情况。
tapestat 报告磁带设备的信息。
cifsiostat 报告CIFS的信息。
sar 收集,报告和存储系统活动信息。
sadc sar的后端,用来收集系统活动数据。
sa1 以二进制的形式收集和存储系统活动数据。
sa2 负责写入日常活动报告的统计信息。
sadf 以不同的格式(CSV,XML,JSON等)显示sar收集的数据。
ptmalloc
mallopt (int PARAM, int VALUE) 设置参数
异步io
cat /proc/sys/fs/aio-nr
linux-aio
内存
透明大页 缩写为THP
grep Huge /proc/meminfo
cat /sys/kernel/mm/transparent_hugepage/defrag
cat /sys/kernel/mm/transparent_hugepage/enabled
cat /proc/sys/vm/nr_hugepages 查看透明大页是否开启
cat /proc/81116/oom_score 进程的oom_score
cat /proc/buddyinfo 查看空闲内存块
虚存导致的oom问题