tree command, 以树形结构显示文件目录结构, 目录树

tree command, 以树形结构显示文件目录结构, 目录树 # tree -L 3 dir_0 以树形结构显示文件目录结构 sudo pacman -S tree sudo apt-get install tree tree -aI .git tree -I '*svn|*node_module*' Linux tree命令用于以树状图列出目录的内容。 执行tree指令,它会列出指定目录下的所有文件,包括子目录里的文件。 语法 tree [-aACdDfFgilnNpqstux][-I <范本样式>][-P <范本样式>][目录...] 参数说明: -a 显示所有文件和目录。 -A 使用 ASNI 绘图字符显示树状图而非以 ASCII 字符组合。 -C 在文件和目录清单加上色彩,便于区分各种类型。 -d 显示目录名称而非内容。 -D 列出文件或目录的更改时间。 -f 在每个文件或目录之前,显示完整的相对路径名称。 -F 在执行文件,目录,Socket,符号连接,管道名称名称,各自加上"*","/","=","@","|“号。 -g 列出文件或目录的所属群组名称,没有对应的名称时,则显示群组识别码。 -i 不以阶梯状列出文件或目录名称。 -L level 限制目录显示层级。 -l 如遇到性质为符号连接的目录,直接列出该连接所指向的原始目录。 -n 不在文件和目录清单加上色彩。 -N 直接列出文件和目录名称,包括控制字符。 -p 列出权限标示。 -P<范本样式> 只显示符合范本样式的文件或目录名称。 -q 用”?“号取代控制字符,列出文件和目录名称。 -s 列出文件或目录大小。 -t 用文件和目录的更改时间排序。 -u 列出文件或目录的拥有者名称,没有对应的名称时,则显示用户识别码。 -x 将范围局限在现行的文件系统中,若指定目录下的某些子目录,其存放于另一个文件系统上,则将该子目录予以排除在寻找范围外。 -I pattern Do not list those files that match the wild-card pattern. https://blog.csdn.net/xuehuafeiwu123/article/details/53817161

2020-05-16 · 1 min · 91 words · -

OkHttp

“OkHttp” https://github.com/square/okhttp RequestBody body = RequestBody.create(MediaTypeJson, jsonStr0); Request request = new Request.Builder() .url(url0) .post(body) .build(); String resp = null; try (Response response = client.newCall(request).execute()) { resp = response.body().string(); } catch (IOException e) { e.printStackTrace(); } proxy static Proxy proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress("127.0.0.1", 8899)); static OkHttpClient client = new OkHttpClient.Builder().proxy(proxy).build(); 1. 历史上Http请求库优缺点 在讲述OkHttp之前, 我们看下没有OkHttp的时代, 我们是如何完成http请求的. 在没有OkHttp的日子, 我们使用HttpURLConnection或者HttpClient. 那么这两者都有什么优缺点呢? 为什么不在继续使用下去呢? HttpClient是Apache基金会的一个开源网络库, 功能十分强大, API数量众多, 但是正是由于庞大的API数量使得我们很难在不破坏兼容性的情况下对它进行升级和扩展, 所以Android团队在提升和优化HttpClient方面的工作态度并不积极. HttpURLConnection是一种多用途, 轻量极的HTTP客户端, 提供的API比较简单, 可以容易地去使用和扩展. 不过在Android 2.2版本之前, HttpURLConnection一直存在着一些令人厌烦的bug. 比如说对一个可读的InputStream调用close()方法时,就有可能会导致连接池失效了。那么我们通常的解决办法就是直接禁用掉连接池的功能: ...

2020-05-15 · 1 min · 134 words · W10N

hugo 搜索

“hugo 搜索” Algolia https://www.algolia.com/ https://www.qikqiak.com/post/hugo-integrated-algolia-search/ https://github.com/actions/setup-node https://github.com/replicatedhq/hugo-algolia

2020-05-13 · 1 min · 7 words · W10N

Linux性能测试工具

Linux性能测试工具 uptime uptime命令用于查看服务器运行了多长时间以及有多少个用户登录,快速获知服务器的负荷情况。 uptime的输出包含一项内容是load average,显示了最近1,5,15分钟的负荷情况。它的值代表等待CPU处理的进程数,如果CPU没有时间处理这些进程,load average值会升高;反之则会降低。 load average的最佳值是1,说明每个进程都可以马上处理并且没有CPU cycles被丢失。对于单CPU的机器,1或者2是可以接受的值;对于多路CPU的机器,load average值可能在8到10之间。 也可以使用uptime命令来判断网络性能。例如,某个网络应用性能很低,通过运行uptime查看服务器的负荷是否很高,如果不是,那么问题应该是网络方面造成的。 dmesg dmesg命令主要用来显示内核信息。使用dmesg可以有效诊断机器硬件故障或者添加硬件出现的问题。 另外,使用dmesg可以确定您的服务器安装了那些硬件。每次系统重启,系统都会检查所有硬件并将信息记录下来。执行/bin/dmesg命令可以查看该记录。 top top命令显示处理器的活动状况。缺省情况下,显示占用CPU最多的任务,并且每隔5秒钟做一次刷新。 Process priority的数值决定了CPU处理进程的顺序。LIUNX内核会根据需要调整该数值的大小。nice value局限于priority。priority的值不能低于nice value (nice value值越低,优先级越高) 。您不可以直接修改Process priority的值,但是可以通过调整nice level值来间接地改变Process priority值,然而这一方法并不是所有时候都可用。如果某个进程运行异常的慢,可以通过降低nice level为该进程分配更多的CPU。 iostat iostat由Red Hat Enterprise Linux AS发布。同时iostat也是Sysstat的一部分,可以下载到,网址是http://perso.wanadoo.fr/sebastien.godard/ 执行iostat命令可以从系统启动之后的CPU平均时间,类似于uptime。除此之外,iostat还对创建一个服务器磁盘子系统的活动报告。该报告包含两部分: CPU使用情况和磁盘使用情况。 vmstat vmstat提供了processes, memory, paging, block I/O, traps和CPU的活动状况 sar sar是Red Hat Enterprise Linux AS发行的一个工具,同时也是Sysstat工具集的命令之一,可以从以下网址下载: http://perso.wanadoo.fr/sebastien.godard/ sar用于收集、报告或者保存系统活动信息。sar由三个应用组成: sar显示数据、sar1和sar2用于收集和保存数据。 使用sar1和sar2,系统能够配置成自动抓取信息和日志,以备分析使用。配置举例: 在/etc/crontab中添加如下几行内容 同样的,你也可以在命令行方式下使用sar运行实时报告。如图所示: 从收集的信息中,可以得到详细的CPU使用情况(%user, %nice, %system, %idle)、内存页面调度、网络I/O、进程活动、块设备活动、以及interrupts/second KDE System Guard KDE System Guard (KSysguard) 是KDE图形方式的任务管理和性能监视工具。监视本地及远程客户端/服务器架构体系的中的主机。 free /bin/free命令显示所有空闲的和使用的内存数量,包括swap。同时也包含内核使用的缓存。 Traffic-vis Traffic-vis是一套测定哪些主机在IP网进行通信、通信的目标主机以及传输的数据量。并输出纯文本、HTML或者GIF格式的报告。 注: Traffic-vis仅仅适用于SUSE LINUX ENTERPRISE SERVER。 ...

2020-05-10 · 1 min · 78 words · W10N

macvlan

“macvlan” https://cizixs.com/2017/02/14/network-virtualization-macvlan/ macvlan 是 linux kernel 比较新的特性,可以通过以下方法判断当前系统是否支持: modprobe macvlan lsmod | grep macvlan macvlan 19046 0 macvlan 允许你在主机的一个网络接口上配置多个虚拟的网络接口,这些网络 interface 有自己独立的 mac 地址,也可以配置上 ip 地址进行通信。macvlan 下的虚拟机或者容器网络和主机在同一个网段中,共享同一个广播域。macvlan 和 bridge 比较相似,但因为它省去了 bridge 的存在,所以配置和调试起来比较简单,而且效率也相对高。除此之外,macvlan 自身也完美支持 VLAN。 四种模式 private mode: 过滤掉所有来自其他 macvlan 接口的报文,因此不同 macvlan 接口之间无法互相通信 vepa(Virtual Ethernet Port Aggregator) mode: 需要主接口连接的交换机支持 VEPA/802.1Qbg 特性。所有发送出去的报文都会经过交换机,交换机作为再发送到对应的目标地址 (即使目标地址就是主机上的其他 macvlan 接口) ,也就是 hairpin mode 模式,这个模式用在交互机上需要做过滤、统计等功能的场景。 bridge mode: 通过虚拟的交换机讲主接口的所有 macvlan 接口连接在一起,这样的话,不同 macvlan 接口之间能够直接通信,不需要将报文发送到主机之外。这个模式下,主机外是看不到主机上 macvlan interface 之间通信的报文的。 passthru mode: 暂时没有搞清楚这个模式要解决的问题 VEPA 和 passthru 模式下,两个 macvlan 接口之间的通信会经过主接口两次: 第一次是发出的时候,第二次是返回的时候。这样会影响物理接口的宽带,也限制了不同 macvlan 接口之间通信的速度。如果多个 macvlan 接口之间通信比较频繁,对于性能的影响会比较明显。 ...

2020-05-04 · 2 min · 273 words · W10N

内网穿透

内网穿透 https://github.com/ehang-io/nps https://github.com/ehang-io/nps/releases docker pull ffdfgdfg/nps docker run -d --name nps --net=host -v nps-config:/conf ffdfgdfg/nps 内网穿透 https://github.com/ehang-io/nps https://github.com/ehang-io/nps/releases docker pull ffdfgdfg/nps docker run -d --name nps --net=host -v nps-config:/conf ffdfgdfg/nps

2020-04-28 · 1 min · 30 words · -

go 原子操作

go 原子操作 原子操作 像Java一样,Golang支持很多CAS操作。运行结果是unsaftCnt可能小于200,因为unsafeCnt++在机器指令层面上不是一条指令,而可能是从内存加载数据到寄存器、执行自增运算、保存寄存器中计算结果到内存这三部分,所以不进行保护的话有些更新是会丢失的。 package main import ( “fmt” “time” “sync/atomic” “runtime” ) func main() { // IMPORTANT!!! runtime.GOMAXPROCS(4) // thread-unsafe var unsafeCnt int32 = 0 for i := 0; i < 10; i++ { go func() { for i := 0; i < 20; i++ { time.Sleep(time.Millisecond) unsafeCnt++ } }() } time.Sleep(time.Second) fmt.Println("cnt: ", unsafeCnt) // CAS toolkit var cnt int32 = 0 for i := 0; i < 10; i++ { go func() { for i := 0; i < 20; i++ { time.Sleep(time.Millisecond) atomic.AddInt32(&cnt, 1) } }() } time.Sleep(time.Second) cntFinal := atomic.LoadInt32(&cnt) fmt.Println("cnt: ", cntFinal) } ...

2020-04-26 · 1 min · 114 words · -

yum, dnf repo

yum, dnf repo CentOS Extras —— 在 CentOS 5 及 6,这些组件提供额外功能,但不损坏 CentOS 与上游的兼容性,也不会更新基本组件,然而上游并未测试这些软件,它们亦不包含在上游产品内。在 CentOS 7 这是上游的软件库,也包含额外的 CentOS 组件。CentOS 的开发小组已经针对这个软件库内的每个程序作出测试,确定它们能在 CentOS 下运作。这个软件库已连同 CentOS 一并安装,并缺省为启用的。 CentOSPlus —— 这些组件为了提供额外功能,会更改 CentOS 的某些基本组件。这个软件库会导致 CentOS 与上游供应者的内容有异。CentOS 的开发小组已经针对这个软件库内的每个程序作出测试,确定它们能在 CentOS 下运作。上游供应者并未测试这些软件,它们亦不包含在上游产品内。这个软件库已连同 CentOS 一并安装,但缺省为停用的。由这个软件库提供的受欢迎组件包括: CentOS-Plus 内核 (含有额外修正、驱动程序/功能的重建内核) ,支持 postgresql 数据库的 postfix (官方版本只支持 MySQL) 。

2020-04-26 · 1 min · 45 words · -

dnf basic

dnf basic 升级所有系统软件包 用处: 该命令用于升级系统中所有有可用升级的软件包 # "update" is just a deprecated alias for "upgrade", they do exactly the same thing. dnf update dnf upgrade 安装 dnf install rsync 删除 dnf remove nano 或 # dnf erase nano 删除无用孤立的软件包 用处: 当没有软件再依赖它们时,某一些用于解决特定软件依赖的软件包将会变得没有存在的意义,该命令就是用来自动移除这些没用的孤立软件包。 dnf autoremove dnf --version dnf repolist – 查看系统中可用和不可用的所有的 DNF 软件库 用处: 该命令用于显示系统中可用和不可用的所有的 DNF 软件库 命令: # dnf repolist all – 列出所有安装了的 RPM 包 dnf list installed – 列出所有 RPM 包 dnf list – 列出所有可供安装的 RPM 包 用处: 该命令用于列出来自所有可用软件库的可供安装的软件包 命令: # dnf list available – 搜索软件库中的 RPM 包 用处: 当你不知道你想要安装的软件的准确名称时,你可以用该命令来搜索软件包。你需要在"search"参数后面键入软件的部分名称来搜索。 (在本例中我们使用"nano") 命令: # dnf search nano – 查看软件包详情 用处: 当你想在安装某一个软件包之前查看它的详细信息时,这条命令可以帮到你。 (在本例中,我们将查看"nano"这一软件包的详细信息) 命令: # dnf info nano – 安装软件包 用处: 使用该命令,系统将会自动安装对应的软件及其所需的所有依赖 (在本例中,我们将用该命令安装nano软件) 命令: # dnf install nano – 升级软件包 用处: 该命令用于升级制定软件包 (在本例中,我们将用命令升级"systemd"这一软件包) 命令: # dnf update systemd – 检查系统软件包的更新 用处: 该命令用于检查系统中所有软件包的更新 命令: # dnf check-update dnf upgrade --refresh dnf system-upgrade reboot – 删除软件包 用处: 删除系统中指定的软件包 (在本例中我们将使用命令删除"nano"这一软件包) 命令: # dnf remove nano 或 # dnf erase nano – 删除无用孤立的软件包 用处: 当没有软件再依赖它们时,某一些用于解决特定软件依赖的软件包将会变得没有存在的意义,该命令就是用来自动移除这些没用的孤立软件包。 命令: # dnf autoremove – 删除缓存的无用软件包 用处: 在使用 DNF 的过程中,会因为各种原因在系统中残留各种过时的文件和未完成的编译工程。我们可以使用该命令来删除这些没用的垃圾文件。 命令: # dnf clean all – 获取有关某条命令的使用帮助 用处: 该命令用于获取有关某条命令的使用帮助 (包括可用于该命令的参数和该命令的用途说明) (本例中我们将使用命令获取有关命令"clean"的使用帮助) 命令: # dnf help clean – 查看所有的 DNF 命令及其用途 用处: 该命令用于列出所有的 DNF 命令及其用途 命令: # dnf help – 查看 DNF 命令的执行历史 用处: 您可以使用该命令来查看您系统上 DNF 命令的执行历史。通过这个手段您可以知道在自您使用 DNF 开始有什么软件被安装和卸载。 命令: # dnf history – 查看所有的软件包组 用处: 该命令用于列出所有的软件包组 命令: # dnf grouplist – 安装一个软件包组 用处: 该命令用于安装一个软件包组 (本例中,我们将用命令安装"Educational Software"这个软件包组) 命令: # dnf groupinstall 'Educational Software' – 升级一个软件包组中的软件包 用处: 该命令用于升级一个软件包组中的软件包 (本例中,我们将用命令升级"Educational Software"这个软件包组中的软件) 命令: # dnf groupupdate 'Educational Software' – 删除一个软件包组 用处: 该命令用于删除一个软件包组 (本例中,我们将用命令删除"Educational Software"这个软件包组) 命令: # dnf groupremove 'Educational Software' – 从特定的软件包库安装特定的软件 用处: 该命令用于从特定的软件包库安装特定的软件 (本例中我们将使用命令从软件包库 epel 中安装 phpmyadmin 软件包) 命令: # dnf –enablerepo=epel install phpmyadmin – 更新软件包到最新的稳定发行版 用处: 该命令可以通过所有可用的软件源将已经安装的所有软件包更新到最新的稳定发行版 命令: # dnf distro-sync – 重新安装特定软件包 用处: 该命令用于重新安装特定软件包 (本例中,我们将使用命令重新安装"nano"这个软件包) 命令: # dnf reinstall nano – 回滚某个特定软件的版本 用处: 该命令用于降低特定软件包的版本 (如果可能的话) (本例中,我们将使用命令降低"acpid"这个软件包的版本) 命令: # dnf downgrade acpid DNF 包管理器作为 YUM 包管理器的升级替代品,它能自动完成更多的操作。但在我看来,正因如此,所以 DNF 包管理器不会太受那些经验老道的 Linux 系统管理者的欢迎。举例如下: ...

2020-04-26 · 2 min · 372 words · -

单臂路由

单臂路由 openwrt设置 lan口设置 Network>interface>lan>physical settings: Lan口关闭桥接, Lan口取消桥接接口的勾选 接口选择网卡eth0 wan口设置 Network>interface>wan>physical settings: 接口选择网卡eth0 (跟lan口选择同一个网卡) Proxmox VE +openwrt|| docker + openwrt 单臂路由 Docker上运行Lean大源码编译的OpenWRT (初稿) https://openwrt.club/93.html/embed#?secret=a5nUefewHz https://www.redhat.com/sysadmin/leasing-ips-podman https://www.right.com.cn/forum/thread-941106-1-1.html https://github.com/lisaac/blog/issues/4 https://github.com/lisaac/openwrt-in-docker https://www.5yun.org/openwrt-x86-dan-bi-lu-you-dan-wang-kou-shang-wang-fang-fa.html

2020-04-25 · 1 min · 28 words · -

podman in crostini

podman in crostini ERRO[0000] ‘overlay’ is not supported over btrfs at “/var/lib/containers/storage/overlay” https://bugs.chromium.org/p/chromium/issues/detail?id=938877&q=overlayfs&can=2 https://bugs.chromium.org/p/chromium/issues/detail?id=878034

2020-04-25 · 1 min · 14 words · -

华为云CCE, docker 实例发监控数据到influxdb

华为云CCE, docker 实例发监控数据到influxdb docker集群内部新建telegraf实例 从官方repo取到的telegraf镜像 不是最新版本, 手动上传导出 的docker image 到华为云,并创建telegraf 实例 telegraf使用influxdb_listener input plugin docker 实例 内的应用 用go metrics influxdb发数据到集群内的telegraf 的 influxdb listener

2020-04-22 · 1 min · 23 words · -

vim 粘贴注释

vim 粘贴注释 vim在粘贴代码时会自动缩进,这样会把有注释的代码搞得一团糟,可能因为某行的一个注释造成后面的代码全部被注释掉,以前就是直接粘贴的,发现不得不解决这个自动添加注释的问题。 临时方法: vim 是自带缩进的,我们执行粘贴前需要设置为粘贴模式: set paste 当我们写代码时需要缩进,进而,在粘贴完了需要改回来: set no paste 一劳永逸方法: 为了避免麻烦,我们可以为vim设置快捷键: 在/etc/vim中,修改vimrc,追加代码: vim /etc/vim/.vimrc 追加代码: set pastetoggle=<F9> 这样你每次粘贴前就按一下F9,完事之后再F9切回来,OK! vim粘贴注释-解决方法 http://www.chenglin.name/linux/blog-linux/595.html/embed#?secret=QDy4MQGTrl

2020-04-22 · 1 min · 23 words · -

ssh Multiplexing,mux

ssh Multiplexing,mux 管理multiplexing 查看当前的状态 ssh -O check machine1 ssh -O check 192.168.50.169 -l root # Master running (pid=91057) 停止接受新的会话 ssh -O stop machine1 $ ssh -O stop root@47.91._._ # Stop listening request sent. 退出所有会话 ssh -O exit root@47.91._._ # Exit request sent. Session Multiplexing emacs /etc/ssh/ssh_config emacs ~/.ssh/config #--- Host * ControlMaster auto ControlPath ~/.ssh/master-%r@%h:%p ControlPersist 10m http://schin.space/ops/OPS-openssh-multiplexing/ 很多使用类Unix的用户常常头疼的一个问题是,多次登录远程主机的时候,需要重复的输入密码,尤其在登录跳板机还要输入动态token的时候,开多个会话窗口是一件很繁琐的事情 multiplexing 幸运的是,openssh通过multiplexing功能进行了连接优化,通过mulitiplexing可以实现多个ssh会话共用同一个tcp连接 实现multiplexing后,无论打开多少个ssh会话窗口,netstat显示的ssh连接都只有第一次会话建立的连接 $netstat -navp tcp | grep 22 tcp4 0 0 192.168...60603 47.91...22 ESTABLISHED 131072 131768 79974 0 ...

2020-04-21 · 3 min · 624 words · -

linux tcp 连接建立时间

linux tcp 连接建立时间 lsof -P -i tcp | awk '{print $2,$4}' | tr -d 'u' | sort -u stat --printf "%z %N\n" /proc/$pid/fd/$fd

2020-04-21 · 1 min · 23 words · -

性能测试, performance testing

性能测试, performance testing 基准测试, benchmarking testing 性能测试, performance testing 测试系统在各种负载条件下的响应时间、吞吐量、资源使用等性能表现,以确保系统在预期的使用场景下能正常运行。 性能测试是什么: 性能测试就是通过特定的方式对被测试系统按照一定测试策略施加压力,获取该系统的响应时间、TPS、吞吐量、资源利用率等性能指标,来检测系统上线后能否满足用户需求的过程。 性能测试要统一考虑这么几个因素: Thoughput吞吐量/吞吐率,Latency响应时间,资源利用 (CPU/MEM/IO/Bandwidth…) ,成功率,系统稳定性。 并发数 并发数是指系统同时能处理的请求数量,这个也是反应了系统的负载能力。 响应时间 响应时间是一个系统最重要的指标之一,它的数值大小直接反应了系统的快慢。响应时间是指执行一个请求从开始到最后收到响应数据所花费的总体时间。 吞吐量/吞吐率 吞吐量是指单位时间内系统能处理的请求数量,体现系统处理请求的能力,这是目前最常用的性能测试指标。 QPS (每秒查询数) 、TPS (每秒事务数) 是吞吐量的常用量化指标,另外还有HPS (每秒HTTP请求数) 。 跟吞吐量有关的几个指标是: 并发数、响应时间。 QPS (TPS) ,并发数、响应时间它们三者之间的关系是: QPS (TPS) =并发数/平均响应时间 响应时间 指的是客户发出请求到得到响应的整个过程的时间。在某些工具中,请求响应时间通常会被称为"TTLB"(Time to laster byte) ,意思是从发起一个请求开始,到客户端收到最后一个字节的响应所耗费的时间。 https://blog.wiloon.com/?p=16015 资源指标 CPU使用率: 指用户进程与系统进程消耗的CPU时间百分比,长时间情况下,一般可接受上限不超过85%。 CPU指标主要指的CPU利用率,包括用户态(user)、系统态(sys)、等待态(wait)、空闲态(idle)。 CPU 利用率要低于业界警戒值范围之内,即小于或者等于75%; CPU sys%小于或者等于30%; CPU wait%小于或者等于5%; 内存利用率: 内存利用率=(1-空闲内存/总内存大小)*100%,一般至少有10%可用内存,内存使用率可接受上限为85%。 磁盘I/O: 磁盘主要用于存取数据,因此当说到IO操作的时候,就会存在两种相对应的操作,存数据的时候对应的是写IO操作,取数据的时候对应的是是读IO操作,一般使用% Disk Time(磁盘用于读写操作所占用的时间百分比)度量磁盘读写性能。 网络带宽: 一般使用计数器Bytes Total/sec来度量,Bytes Total/sec表示为发送和接收字节的速率,包括帧字符在内。判断网络连接速度是否是瓶颈,可以用该计数器的值和目前网络的带宽比较。 系统指标 并发用户数: 某一物理时刻同时向系统提交请求的用户数。 在线用户数: 某段时间内访问系统的用户数,这些用户并不一定同时向系统提交请求。 平均响应时间: 系统处理事务的响应时间的平均值。事务的响应时间是从客户端提交访问请求到客户端接收到服务器响应所消耗的时间。对于系统快速响应类页面,一般响应时间为3秒左右。 ...

2020-04-21 · 1 min · 154 words · -

性能测试-响应时间

性能测试-响应时间 https://www.cnblogs.com/fnng/archive/2012/07/01/2571990.html 响应时间过程分析 我们需要对这个过程进行分解,才能得到你真正想要的响应时间。我把整个过程分三个部分,呈现时间,数据传输时间和系统处理时间。 呈现时间 其实主要说的浏览器对接收到数据的一个处理展示的过程。几年前大家都在用IE,如果页面显示比较慢,我们肯定不会怪罪IE,只会怪罪电信运营商的网速或被访问的系统 (其实,大多情况我们不会考虑是被访问系统的问题) 。现在chrome来了,我们会发现同一台电脑同一个网站,通过chrome去访问,页面的呈现速度会比IE略快。这是各种评测及大众用户的整体感受。当然,我个人感觉,opera浏览器的呈现速度最快,但它的显示效果一直不太好。 当然,我说这个呈现时间总不能全怪罪与浏览器的身上吧!当然还和承载它的操作系统有关,以及电脑硬件 (比如cpu 内存) 。假如你有超快的浏览器,如果是一台极其垃圾的电脑,我想你多打开两个网页就有可能使电脑卡掉。 数据传输时间 千万不要忽视数据传输时间。如果你要寄信给你一个远方的朋友,你想是什么影响你将信息传递给远方的朋友?不是你写信的过程 (如果你写的信不像书一样厚的话) ,也不是你朋友读信的过程,而是送信的过程。 (ps, 我10天前在china-pub订购的一本书现在还没到货!XXX) 拿我们系统的数据传输过程来说,我们发送一个请求需要时间,系统处理完后返回给我们也需要时间。初学性能测试工具的同学喜欢拿工具去测试互联网上的一些系统,甚至不懂性能的同学认为可以用性能测试工具将互联网上的一些网站压崩溃。貌似这一招比任何黑客攻击厉害多去。 那么,我觉得这些同学应该补补网络知识了,你的带宽是多少?互联网是个网,就是算是相同的起点与终点,它有可能走的不同的路线。有没有考虑网络延迟?就算你的并发请求都能成功的发出,但到目的地的时候,已经不能叫并发了。 这也是为什么我们在一般做性能测试时,一般要强调要在局域网中进行。当然,也有特殊的性能测试需要在互联网中时行。它们重点不是求用户的最大的并发量。 系统处理时间 系统得到请求后对请求进行处理并将结果返回。那我进行性能测试主要就是验证系统的处理时间,因为前面的呈现时间和数据传输时间都我们不可控制的,用户使用的电脑及浏览器千差万别,用户的网络状况千差万别。我们唯一能控制的就是将系统的处理请求的时间缩到最短暂。 如果我们对系统的的处理进行分析和讲解的话,它会是一个非常庞大与复杂的过程。语言、语言框架、中间件,数据库、系统架构以及服务器系统。所以,想成为一个优秀的性能测试工程师我们的路还很长。 响应时间的定义: 响应时间 指的是客户发出请求到得到响应的整个过程的时间。在某些工具中,请求响应时间通常会被称为"TTLB"(Time to laster byte) ,意思是从发起一个请求开始,到客户端收到最后一个字节的响应所耗费的时间。 系统响应时间 应用系统从发出请求开始到客户端接收到响应所消耗的时间 合理的响应时间 在互联网上对于用户响应时间,有一个普遍的标准。2/5/10秒原则。 也就是说,在2秒之内给客户响应被用户认为是"非常有吸引力"的用户体验。在5秒之内响应客户被认为"比较不错"的用户体验,在10秒内给用户响应被认为"糟糕"的用户体验。如果超过10秒还没有得到响应,那么大多用户会认为这次请求是失败的。 这里我们还要考虑一个使用频率的概念。 我最早安装windows系统可能要1个小时,我们为什么觉得这很正常,因为我们要很久才装一次系统,如果系统使用得当,可能一个系统用几年不用重装,假如,我们在系统上装个任何小软件都要这么长时间,那我们一定是无法忍受的。对于软件控来说,他们会时常安装各种新鲜有趣的软件进行使用。 对于一个税务报账系统,该系统的用户每月使用一次,一次花费3小时进行数据的录入, 当用户单击"提交"按钮后,即使系统在10分钟后才给出"处理成功"的消息,我们也觉得是可以接受的。 因此,在进行性能测试时,“合理的响应时间"取决于用户的需求,而不能依据测试人员自己设想来决定。

2020-04-20 · 1 min · 41 words · -

cobra

cobra https://github.com/spf13/cobra-cli/blob/main/README.md go install github.com/spf13/cobra-cli@latest go mod init xxxxx cobra-cli init viper https://github.com/spf13/viper https://darjun.github.io/2020/01/17/godailylib/cobra/

2020-04-20 · 1 min · 14 words · -

json tool, jq command

json tool, jq command, json 格式化 install apt install jq https://stedolan.github.io/jq/ https://stedolan.github.io/jq/download/ jq ".[0]|.releases| .[0]|.downloads.linux.link" cat foo.txt|jq '.checklists|.[0]|.checkItems|.[].name' cat foo.txt|jq '.checklists|.[0]|.checkItems|.[]|if .state == "incomplete" then .name else "" end'|grep -v '""' jq 可以对 json 数据进行分片、过滤、映射和转换 jq 是用 C 编写,没有运行时依赖,所以几乎可以运行在任何系统上。预编译的二进制文件可以直接在Linux、OS X和windows系统上运行,当然在linux和OS X系统你需要赋与其可执行权限;在linux系统中也可以直接用yum安装。 下载页面: . 最简单的表达式 .,格式化输出 [index] 输出列表中的第一个元素,可以使用[0]: cat json.txt | jq ‘.[0]’ 管道符 | cat json.txt | jq ‘.[0] | .name ' json格式化 echo '{"kind": "Service", "apiVersion": "v1", "status": {"loadBalancer": true}}' | jq . { "kind": "Service", "apiVersion": "v1", "status": { "loadBalancer": true } } jq 生成 json 字符串 BUCKET_NAME=testbucket OBJECT_NAME=testworkflow-2.0.1.jar TARGET_LOCATION=/opt/test/testworkflow-2.0.1.jar JSON_STRING=$(jq -n \ --arg bucketname "$BUCKET_NAME" \ --arg objectname "$OBJECT_NAME" \ --arg targetlocation "$TARGET_LOCATION" \ '$ARGS.named') jq -n \ --arg foo "bar" \ --arg bar "foo" \ '$ARGS.named' –null-input | -n, 禁止 jq 读取输入, 在用 jq 生成 json 字符串时需要用这个选项把输入置空. –arg name value, 定义变量 Named arguments are also available to the jq program as $ARGS.named. https://stackoverflow.com/questions/48470049/build-a-json-string-with-bash-variables ...

2020-04-19 · 1 min · 160 words · -

docker 网络

docker 网络 安装 Docker 时,它会自动创建 3 个网络。可以使用 docker network ls 命令列出这些网络。 $ docker network ls NETWORK ID NAME DRIVER 7fca4eb8c647 bridge bridge 9f904ee27bf5 none null cf03ee007fb4 host host 运行一个容器时,可以使用 the -net 标志指定您希望在哪个网络上运行该容器。 bridge 网络表示所有 Docker 安装中都存在的 docker0 网络。除非使用 docker run -net=选项另行指定,否则 Docker 守护进程默认情况下会将容器连接到此网络。在主机上使用 ifconfig命令,可以看到此网桥是主机的网络堆栈的一部分。 none 网络在一个特定于容器的网络堆栈上添加了一个容器。该容器缺少网络接口。 host 网络在主机网络堆栈上添加一个容器。您可以发现,容器中的网络配置与主机相同。 用户定义的网络 您可以创建自己的用户定义网络来更好地隔离容器。Docker 提供了一些默认网络驱动程序来创建这些网络。您可以创建一个新 bridge 网络或覆盖一个网络。也可以创建一个网络插件或远程网络并写入您自己的规范中。 您可以创建多个网络。可以将容器添加到多个网络。容器仅能在网络内通信,不能跨网络进行通信。一个连接到两个网络的容器可与每个网络中的成员容器进行通信。当一个容器连接到多个网络时,外部连接通过第一个 (按词典顺序) 非内部网络提供。

2020-04-19 · 1 min · 56 words · -