perf是 Linux 系统原生提供的性能分析工具,会返回 CPU 正在执行的函数名以及调用栈(stack)。
Perf可以对程序进行函数级别的采样,从而了解程序的性能瓶颈在哪里。其基本原理是:每隔一个固定时间,就是CPU上产生一个中断,看当前是哪个进程、哪个函数,然后给对应的进程和函数加一个统计值,这样就知道CPU有多少时间在某个进程或某个函数上了。具体原作原理就是直接通过系统调用syscall/ioctl或者监听SW的event来看性能。
perf支持两种模式,计算模式和采样模式。比如,perf stat使用的是计算模式,而perf record采用的是采样模式。拿采样来说,它的原理是这样的:每隔一个固定的时间,产生一个中断,然后统计对应的pid和函数。采样就预示着与实际运行情况并不能保持一致,但如果一个函数运行的时间越长,被时钟中断的机会就越大。鉴于perf最终显示的是统计值,所以它的测量结果是高度可信的。
perf包含了多个工具,使用perf –help可以看到perf的二级命令,其中,perf top类似于top命令,可以对系统性能进行实时分析。
perf --help 查看perf的二级命令
perf top #查看cpu执行情况
perf top -p pid #查看某个进程所有函数占用cpu信息
perf top -g -p pid #查看特定函数的抵用关系
perf top -t tid / perf record -t tid #查看单线程信息
perf record -a #采样,当前目录生成perf.data文件。
perf record -g -p pid #将信息输出到文件
perf report #显示类似于perf top的报告
https://github.com/cobblau/FlameGraph
火焰图(CPU Flame Graphs)是一个将CPU调用栈可视化的应用,需要使用perf, eBPF等tracer工具生成数据,然后进行可视化生成svg图片。
git clone https://github.com/brendangregg/FlameGraph.git
perf record -F 99 -a -g -p pid sleep 60
其中,-F 99 表示采样频率,每秒99次;-a表示采集所有CPU的信息,-g表示记录函数调用栈, -p pid 表示追踪进程号为pid的进程,对于多个进程号,用逗号’,’分隔,sleep 60 要求采集1分钟的数据。
perf script > out.perf #perf script 工具对生成的perf.data进行解析
./stackcollapse-perf.pl out.perf > out.folded #对符号进行折叠
./flamegraph.pl out.folded >perf.svg #生成svg图
系统级性能分析工具perf的介绍与使用
https://www.cnblogs.com/arnoldlu/p/6241297.html
perf + Flame Graph火焰图分析程序性能
https://www.cnblogs.com/felixzh/p/8932984.html
rsync工作机制(翻译)
https://www.cnblogs.com/f-ck-need-u/p/7221535.html#auto_id_4
下载链接:http://www.rpmfind.net/linux/rpm2html/search.php?query=perf
安装命令:rpm -ivh *.rpm
中文手册:http://linux.51yip.com/search/perf
perf的原理,编译以及使用
https://blog.csdn.net/u013983194/article/details/112209853
一文搞定 Perf 和 Gpertools https://www.51cto.com/article/653774.html
https://blog.csdn.net/qq_41185868/article/details/103895753
https://blog.csdn.net/weixin_35653315/article/details/71642154
https://cloud.tencent.com/developer/article/1796559
https://www.cnblogs.com/ocean1100/p/9276024.html
from future import print_function
安装python3
tar -zxvf Python-3.6.5.tgz
./configure –enable-optimizations –prefix=/usr1/python3
make && make install
ln -s /usr1/python3/bin/python3.6 /usr/bin/python3
ln -s /usr1/python3/bin/pip3.6 /usr/bin/pip3
///安装python3
yum -y install python3
yum -y install python3-devel
Python3.7 ssl模块导入失败的解决办法
https://blog.csdn.net/bluehawksky/article/details/89540842
安装pip
///安装pip包(–trusted-host pypi.tuna.tsinghua.edu.cn)
python3 -m pip install –upgrade pip -i http://mirrors.aliyun.com/pypi/simple –trusted-host mirrors.aliyun.com
pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
python3 -m pip install etcd3 -i http://mirrors.aliyun.com/pypi/simple –trusted-host mirrors.aliyun.com
python3 -m pip install grpcio -i http://mirrors.aliyun.com/pypi/simple –trusted-host mirrors.aliyun.com
python3 -m pip install grpcio-tools -i http://mirrors.aliyun.com/pypi/simple –trusted-host mirrors.aliyun.com
python3 -m pip install jump-consistent-hash -i http://mirrors.aliyun.com/pypi/simple –trusted-host mirrors.aliyun.com
python3 -m pip install configobj -i http://mirrors.aliyun.com/pypi/simple –trusted-host mirrors.aliyun.com
pwntools等安装
python3 setup.py install
pip3 install .
安装完成后,打开python测试, 执行from pwn import *不会报错即可。
Google搜索:*** pypi
from __future__ import print_function
if sys.version_info < (3, 0):
print (tmp_hex.decode('hex'))
else
print (str(bytes.fromhex(tmp_hex),encoding = "utf-8"))
EOF
https://www.jianshu.com/p/e485c82dcff9
https://blog.51cto.com/u_9595448/3273887
我们平常用的pycharm里面用Ctrl + alt + L 快捷键可以修改大部分的代码格式问题
CPython: 用C语言编写的Python解释器
PyPy: 用python语言编写的Python解释器
IronPython: 用.net编写的Python解释器
Jython:用Java编写的Python解释器
步骤:
1. 下载安装包 3.x 2.x
2. 安装(傻瓜式安装)
3. 打开命令行窗口,输入python
交互模式只能你输入一行代码,它就执行一行,所以他并不适用于我们日常开发
1. 在Sublime中执行python代码,ctrl+b 自动在内置的控制台中执行
2. 使用SublimeREPL来运行python代码
{"keys":["f5"], "caption":"SublimeREPL:Python", "command":"run_existing_window_command", "args":{"id": "repl_python_run","file": "config/Python/Main.sublime-menu" }},
3. 表达式
表达式就是类似于数学公式的东西
表达式一般仅仅用于计算一些结果,不会对程序产生实质性的影响
语句
在程序中语句一般需要完成某种功能,比如打印信息,获取信息,为变量赋值
在交互模式中不一定会输出语句的执行结果
程序(program)
程序就是由一条一条的语句和一条一条的表达式构成的
函数(function)
函数就是一种语句,函数专门用来完成特定的功能
函数的分类:内置函数,自定义函数
内置函数:由python解释器提供的函数,可以在Python中直接使用
自定义函数:由程序员自主的创建的函数
函数的两个要素:
参数
-()中的内容就是函数的参数
- 函数中可以没有参数,也可以有多个参数,多个参数之间使用“,”隔开
返回值
严格区分大小写
一条语句可以分多行编写,语句后边以\结尾
Python是缩进严格的语言,所以在python中不要随便写缩进
在Python中使用#来表示注释,#后的内容都属于注释,注释的内容将会被解释器所忽略
变量可以用来保存字面量,并且变量中保存的字面量是不定的
在python中所有可以自主命名的内容都叫做标识符
比如:变量名,函数名,类名
Python数值分为三种:整数,浮点数(小数),复数
在python中所有的整数都是int类型
Python中的整数的大小没有限制,可以是一个无限大的整数
数字长度过大,可以使用下划线作为分隔符
Python 是一门面向对象的语言。
一切皆对象。
程序运行当中,所有的数据都是存储到内存。
类型转换四个函数 int(), float(), str(), bool()
运算符(操作符)
运算符可以对一个值或多个值进行运算或各种操作
比如+、-、= 都属于运算符
运算符的分类:
1.算术运算符
+ 加法运算符(如果是两个字符串之间进行加法运算,则会进行拼串操作)
- 减法运算符
* 乘法运算符(如果将字符串和数字相乘,则会对字符串进行复制操作,将字符串重复指定次数)
/ 除法运算符,运算时结果总会返回一个浮点类型
// 整除,只会保留计算后的整数位,总会返回一个整型
** 幂运算,求一个值的几次幂
% 取模,求两个数相除的余数
2.赋值运算符
可以将等号右侧的值赋值给等号左侧的变量
3.比较运算符(关系运算符)
4.逻辑运算符
not 逻辑非
and 逻辑与
or 逻辑或
5.条件运算符(三元运算符)
语法: 语句1 if 条件表达式 else 语句2
max = a if a > b and a > c else b if b > c else c
在Linux下使用vim配合xxd查看并编辑二进制文件
在命令模式下键入:
:%!xxd
回到命令模式输入
:%!xxd –r
:setlocal list
:set listchars=tab:>~,trail:.
执行 :setlocal list 命令后,会把 tab 字符显示为 CTRL-I 键的显示字符,实际显示为 ^I。同时会在行末显示一个 $ 字符。默认不会显示空格。
set listchars=tab:>~,trail:. 命令设置 tab 字符显示为 >~~~~ 的样式(假设 tab 字符的显示宽度是 4),设置行末空格显示为点号 .,不显示行首空格和行中间的空格,行末不显示字符。如果需要显示所有空格,可以把 trail 改成 space。
docker ps -a
执行镜像:docker run -it [image id] bash
执行容器:docker exec -it [容器id] bash
启动容器:docker start [容器id]
检查docker引擎:service docker status
重新加载配置文件:systemctl daemon-reload
重启docker: service docker restart
查看配置信息:docker inspect [容器id]
-t
的作用是创建一个伪终端, -i
是让该容器的标准输入保持打开。这样就可以进入到容器的交互模式。-i
-t
一起使用才可以看到我们熟悉的Linux命令提示符。只有 -i
由于没有分配伪终端,界面没有我们熟悉的Linux提示符,但命令结果仍然可以返回。
后面的/bin/bash
表示载入容器后运行bash
,docker中必须要保持一个进程的运行,不然容器启动后就会马上kill itself,/bin/bash
表示启动容器后启动bash。
docker exec -it –privileged 9ce3982ba7c5 bash
以root权限进入docker容器
docker exec -it -u root 9ce3982ba7c5 /bin/bash
以root权限进入docker容器
docker run -it –device=/dev/fuse:/dev/fuse –privileged 3171e55a9515 bash
将fuse设备添加到镜像
使用该参数,container内的root拥有真正的root权限。 否则,container内的root只是外部的一个普通用户权限。
privileged启动的容器,可以看到很多host上的设备,并且可以执行mount。 甚至允许你在docker容器中启动docker容器。
docker run –name tomcat –cpus 0.1 -m 512M -p 8080:8080 -itd feisky/tomcat:8
通过 -m 512M 选项,给容器设置了 512M 的内存限制。
用 –cpus 0.1 ,为容器设置了 0.1 个 CPU 的限制,也就是 10% 的 CPU。
docker cp ~/lzy.log a365b0626781:/home/
docker cp a365b0626781:/home/lzy.log /root/lzy2.log
docker ps -a
重启docker:systemctl daemon-reload && systemctl restart docker
停止所有容器
docker stop $(docker ps -a -q)
删除所有容器
docker rm $(docker ps -a -q)
删除单个容器
docker rm
删除全部镜像
docker rmi $(docker images -q)
删除单个镜像
docker rmi
强制删除全部镜像
docker rmi -f $(docker images -q)
Docker 从容器中拷贝文件到宿主机中
docker cp 容器id:容器内文件路径 目标路径
#示例
docker cp 6741xxxxxxxx:/xxxx/xxx/xxx/xxxx/common.log /home/log/yyy.log
docker inspect [container id]
查看容器信息找到容器完整id
docker-tools 给容器添加设备
docker-tools add-device [容器完整id]
docker pull [仓库地址]
用户制作了自己的镜像后,希望将它上传至仓库
docker export命令导出容器
docker save命令保存镜像
目前存储系统的接口已经有aufs, btrfs, devicemapper, vfs,overlay,zfs这6种具体实现。
查看当前使用的存储驱动:docker info
//停止运行中的docker引擎
systemctl stop docker
//启动docker引擎
systemctl start docker
//对原有数据Docker联合文件数据进行备份
cp -au /var/lib/docker /var/lib/docker.bk
创建一个名为our-volume的卷,命令如下:
docker volume create our-volume
检查卷的详细信息
docker volume ls
移除数据卷
docker volume remove our-volume
systemctl show –property=Environment docker
通过docker logs命令可以查看容器的日志。
https://blog.csdn.net/chengxuyuanyonghu/article/details/76560166
docker exec -it -e LINES=$(tput lines) -e COLUMNS=$(tput cols) 容器ID bash
1.Is the docker daemon running?
service docker start
docker.service启动失败:Unit not found的原因及解决办法
https://blog.csdn.net/u013392078/article/details/103800411
A.卸载docker,再重新安装,即可出现docker.socket。
B.创建docker.socket文件,然后systemctl daemon-reload,最后systemctl start docker.service,即可启动成功。
2.No space left on device
https://blog.csdn.net/yilvqingtai/article/details/122934209?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-122934209-blog-111244328.pc_relevant_3mothn_strategy_recovery&spm=1001.2101.3001.4242.1&utm_relevant_index=3
https://www.cnblogs.com/54chensongxia/p/15138314.html
A.df -h或 du -sh * |G 找到用量最大的空间[maxSpace] 和可用的最大空间[avaliableSpace];
B.docker info |grep Root 找到docker的root目录[docker-root];
C.service docker stop 停docker服务;
D.mv [docker-root] [avaliableSpace];
E.构建软链接 ln -s [avaliableSpace] [docker-root];
F.service docker restart;
ping [ id | host ]: 发送icmp给目标主机 |
ping 可以验证目标主机是否连通
ping ip -t
ping检查主机是否在线的工具。发送ICMP ECHO REQUEST包到目标主机,如果目标主机在线井且不堵塞ping请求,将回复ICMP ECHO REPLY包。单击桌面,右键菜单选择“在终端中打开”。如图1所示 命令选项:-c count, ECHO_REQUEST包发进数量。-i interface address:源地址网络接口。该参数可以是lP地址或网卡名称。-s packetfsize;指定要发送的数据字节数。默认值是56,然后再与8字节的ICMP头数据组台成64字节的ICMP数据。
ping -c 5 -s 2000 192.168.10.127”,发送5个大小为2000字节的数据包
arping是一个在LAN中使用ARP地址解析协议发现目标主机的工具。arping工具测试特定IP地址在网络中是否在线。该命令只能运行本地局域网内,无法跨越路由器和网关,常用的选项为apring –c,在终端中输入命令“arping -c 4 192.168.10.127”,发送四个ping数据包到目标主机。
arping命令是用于发送arp请求到一个相邻主机的工具,arping使用arp数据包,通过ping命令检查设备上的硬件地址。能够测试一个ip地址是否是在网络上已经被使用,并能够获取更多设备信息。功能类似于ping。
fping命令同时向多个主机发送ping (ICMP ECHO)请求,fping通过监视目标主机的回复来判断主机是否可用。如果目标主机发送回应将会从目标记录清单中删除,如果目标主机不响应,该主机将会被标记为不可达。默认情况下,fping将尝试向每个目标发送三个ICMP ECHO包。
fping - send ICMP ECHO_REQUEST packets to network hosts
UNIX和Windows环境都有许多可以用来进行ICMP ping扫描的工具。fping是UNIX环境里久经考验的ping扫描工具之一。早期的ping扫描工具大都需要等待前一个被探测主机返回某种响应消息之后才能继续探测下一台主机是否存在,但fping却能以轮转方式并行地发出大量的ping请求。这么一来,用fping工具去扫描多个IP地址的速度要比ping快很多。
与ping程序相比,fping可以同时向多个主机发送ping请求,您可以在命令行中指定多个目标主机,也可以在某个文件夹里指定需要被检测的主机。默认情况下,fping程序通过目标主机的回复来判断该主机是否在线。如果目标主机发送回应,该主机将会被标记为alive(在线):如果主机在同一段时间内(超过或超过尝试次数)没有进行回应,该主机则会被标记为unreachable(不可访问)。默认情况下fping将尝试向每个目标发送三次ICMP echo数据包。
nbtscan 通过扫描lP地址获取目标NetBIOS名字信息的工具,生成包含对应主机IP地址、NetBIOS计算机名、可用服务、登录用户名和MAC地址的报告