BoxCore

Start


  • 首页

  • 分类

  • 关于

  • 归档

  • 标签

  • 站点地图

  • 搜索

谈谈并发的一些基础概念

发表于 2017-11-22 | | 阅读次数
  • pv 是指页面被浏览的次数,比如你打开一网页,那么这个网站的pv就算加了一次;
  • tps是每秒内的事务数,比如执行了dml操作,那么相应的tps会增加。
  • qps是指每秒内查询次数,比如执行了select操作,相应的qps会增加。QPS = req/sec = 请求数/秒

  • TPS:Transactions Per Second(每秒传输的事物处理个数),即服务器每秒处理的事务数。TPS包括一条消息入和一条消息出,加上一次用户数据库访问。(业务TPS = CAPS × 每个呼叫平均TPS)
    TPS是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。
    一般的,评价系统性能均以每秒钟完成的技术交易的数量来衡量。系统整体处理能力取决于处理能力最低模块的TPS值。

  • QPS:每秒查询率QPS是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准,在因特网上,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。
    对应fetches/sec,即每秒的响应请求数,也即是最大吞吐能力。

其他的解释:

上面李大头给出了详细的英文解释
pv 是指页面被浏览的次数,比如你打开一网页,那么这个网站的pv就算加了一次;
tps是每秒内的事务数,比如执行了dml操作,那么相应的tps会增加;
qps是指每秒内查询次数,比如执行了select操作,相应的qps会增加。

不同的应用系统tps,qps是没有可对比性的。例如:应用A,每个select查询需要1ms, 一个connection的话,一直不停的执行,1S内 可执行1000次,也就是1000qps应用B,每个select查询需要100ms, 一个connection的话,一直不停的执行,1S内 可执行10次,也就是10qps上面不同系统的两个qps是无法对比的,不能说哪个好哪个坏。满足业务要求才是王道。

术语说明:QPS = req/sec = 请求数/秒

【QPS计算PV和机器的方式】
QPS统计方式 [一般使用 http_load 进行统计]
QPS = 总请求数 / ( 进程总数 * 请求时间 )
QPS: 单个进程每秒请求服务器的成功次数

单台服务器每天PV计算
公式1:每天总PV = QPS 3600 6
公式2:每天总PV = QPS 3600 8

服务器计算
服务器数量 = ceil( 每天总PV / 单台服务器每天总PV )

【峰值QPS和机器计算公式】
原理:每天80%的访问集中在20%的时间里,这20%时间叫做峰值时间公式:

( 总PV数 80% ) / ( 每天秒数 20% ) = 峰值时间每秒请求数(QPS)
机器:峰值时间每秒QPS / 单台机器的QPS = 需要的机器

问:每天300w PV 的在单台机器上,这台机器需要多少QPS?
答:( 3000000 0.8 ) / (86400 0.2 ) = 139 (QPS)
问:如果一台机器的QPS是58,需要几台机器来支持?
答:139 / 58 = 3

Linux流程控制语句之expect

发表于 2017-11-20 | | 阅读次数

我们通过Shell可以实现简单的控制流功能,如:循环、判断等。但是对于需要交互的场合则必须通过人工来干预,有时候我们可能会需要实现和交互程序如telnet服务器等进行交互的功能。而expect就使用来实现这种功能的工具。

expect是一个免费的编程工具语言,用来实现自动和交互式任务进行通信,而无需人的干预。expect是不断发展的,随着时间的流逝,其功能越来越强大,已经成为系统管理员的的一个强大助手。expect需要Tcl编程语言的支持,要在系统上运行expect必须首先安装Tcl。

安装expect

1
yum install expect

使用

1
2
3
4
5
6
#!/usr/bin/expect
  set timeout 30
  spawn ssh -l username 192.168.1.1
  expect "password:"
  send "ispass/r"
  interact

参考

  • http://www.cnblogs.com/meitian/p/5134797.html

Linux文件操作命令之文件处理xargs

发表于 2017-11-20 | | 阅读次数

xargs命令是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。它擅长将标准输入数据转换成命令行参数,xargs能够处理管道或者stdin并将其转换成特定命令的命令参数。xargs也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。xargs的默认命令是echo,空格是默认定界符。这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。xargs是构建单行命令的重要组件之一。

xargs参数和使用

  • -n : 选项多行输出
  • -d : 选项可以自定义一个定界符, mac中不可用(暂未找到实现方法)
  • -I : 使用-I指定一个替换字符串{},这个字符串在xargs扩展时会被替换掉,当-I与xargs结合使用,每一个参数命令都会被执行一次!
  • -0 : 使用0作为边界符,一般在find后面有跟-print0不换行的参数时可以使用;

xargs用作替换工具,读取输入数据重新格式化后输出。下面作一些测试:

1
2
3
4
5
6
7
8
9
cat >> test.txt <<EOF
a b c d e f g
h i j k l m n
o p q
r s t
u v w x y z
EOF;
cat test.txt | xargs # 输出 a b c d e f g h i j k l m n o p q r s t u v w x y z

1
ls *.tar.gz |xargs -n1 tar zxvf # 遍历解压当前目录所有tar.gz压缩包

参考

  • xargs命令

Linux文件操作命令之文件同步rsync

发表于 2017-11-20 | | 阅读次数

--exclude : 排除文件或者文件夹

Linux之字符串处理echo

发表于 2017-11-20 | | 阅读次数

echo显示带颜色,需要使用参数-e
格式如下:
echo -e “\033[字背景颜色;文字颜色m字符串\033[0m”
例如:
echo -e “\033[41;37m TonyZhang \033[0m”
其中41的位置代表底色, 37的位置是代表字的颜色
注:
1、字背景颜色和文字颜色之间是英文的“”””
2、文字颜色后面有个m
3、字符串前后可以没有空格,如果有的话,输出也是同样有空格
下面看几个例子:
echo -e “\033[30m 黑色字 \033[0m”
echo -e “\033[31m 红色字 \033[0m”
echo -e “\033[32m 绿色字 \033[0m”
echo -e “\033[33m 黄色字 \033[0m”
echo -e “\033[34m 蓝色字 \033[0m”
echo -e “\033[35m 紫色字 \033[0m”
echo -e “\033[36m 天蓝字 \033[0m”
echo -e “\033[37m 白色字 \033[0m”

echo -e “\033[40;37m 黑底白字 \033[0m”
echo -e “\033[41;37m 红底白字 \033[0m”
echo -e “\033[42;37m 绿底白字 \033[0m”
echo -e “\033[43;37m 黄底白字 \033[0m”
echo -e “\033[44;37m 蓝底白字 \033[0m”
echo -e “\033[45;37m 紫底白字 \033[0m”
echo -e “\033[46;37m 天蓝底白字 \033[0m”
echo -e “\033[47;30m 白底黑字 \033[0m”
控制选项说明 :
\33[0m 关闭所有属性
\33[1m 设置高亮度
\33[4m 下划线
\33[5m 闪烁
\33[7m 反显
\33[8m 消隐
\33[30m – \33[37m 设置前景色
\33[40m – \33[47m 设置背景色
\33[nA 光标上移n行
\33[nB 光标下移n行
\33[nC 光标右移n行
\33[nD 光标左移n行
\33[y;xH设置光标位置
\33[2J 清屏
\33[K 清除从光标到行尾的内容
\33[s 保存光标位置
\33[u 恢复光标位置
\33[?25l 隐藏光标
\33[?25h 显示光标

Linux下kill、pkill、killall使用

发表于 2017-11-16 | | 阅读次数

终止一个进程或终止一个正在运行的程序,一般是通过 kill 、killall、pkill、xkill 等进行。比如一个程序已经死掉,但又不能退出,这时就应该考虑应用这些工具。

  • kill: kill的应用是和ps 或pgrep 命令结合在一起使用的;
  • pkill: pkill 和killall 应用方法差不多,也是直接杀死运行中的程序;如果您想杀掉单个进程,请用kill 来杀掉
  • killall: killall 通过程序的名字,直接杀死所有进程
  • xkill: xkill 是在桌面用的杀死图形界面的程序

用法

kill 的用法

kill [信号代码] 进程ID(kill -pid)
-s:指定发送的信号。
-p:模拟发送信号。
-l:指定信号的名称列表。
pid:要中止进程的ID号。
Signal:表示信号。
注:信号代码可以省略;我们常用的信号代码是-9 ,表示强制终止;对于僵尸进程,可以用kill -9 来强制终止退出;
killall

killall 通过程序的名字,直接杀死所有进程。

用法:killall 正在运行的程序名
killall 也和ps或pgrep 结合使用,比较方便;通过ps或pgrep 来查看哪些程序在运行

pkill

pkill 和killall 应用方法差不多,也是直接杀死运行中的程序;如果您想杀掉单个进程,请用kill 来杀掉。

用法:pkill 正在运行的程序名
xkill

xkill 是在桌面用的杀死图形界面的程序。

比如当firefox 出现崩溃不能退出时,点鼠标就能杀死firefox 。当xkill运行时出来和个人脑骨的图标,哪个图形程序崩溃一点就OK了。如果您想终止xkill ,就按右键取消;
xkill 调用方法:
[root@localhost ~]# xkill

1
pkill -uroot # root是你要杀死的用户名

vultr主机推荐

发表于 2017-11-08 | | 阅读次数

https://www.vultr.com/?ref=7229300

RESILIO SYNC激活和激活失效修复

发表于 2017-11-08 | | 阅读次数

分享一个Resilio Sync永久的授权文件, 可以任意的选择性同步,使用所有 Resilio Sync 的高级功能。
目前对所有版本有效,测试到最高版本 2.5.9 版本。

rslsync –webui.listen 0.0.0.0:8888

一、安装 Resilio Sync

去官网下载,不过官网可能被ban,需要自行百度一下

二、授权

新安装的resilio sync授权步骤:

  1. 打开resilio sync
  2. 双击安装授权文件Resilio_Sync_Personal.btskey,如果授权成功接着执行下一步,授权失败则需要删除用户配置文件

    安装授权

  3. 配置hosts,添加记录 127.0.0.1 license.resilio.com

  4. 配置授权文件目录不可写入,具体方法参考下面的2.1 和2.2

2.1 windows下配置授权

默认地,resilio用户授权配置文件主要是在 C:\Users\用户目录\AppData\Roaming\Resilio Sync目录下的.SyncUserxxxxxxx和License下。如果需要重新授权,需要将这2个文件夹删除,重启resilio后又可以试用15天软件了。另外,可以下载破解key,屏蔽激活ip后,配置.SyncUserxxxxxxx和License这2个目录不可写即可。

可能的操作如下:

找到安装目录 可以删除 License 目录和.SyncUserxxxxxx 目录

安装目录

禁止写入权限

window禁止写入权限

2.2 mac下配置授权

打开terminal工具

1
2
3
4
5
6
7
8
cd ~/Library/Application\ Support/Resilio\ Sync
ls -a # 查看所有文件找到 .SyncUserxxx 类似的目录(我的是.SyncUser1510108713) 和License目录
chmod -R -w .SyncUser1510108713
chmod -R -w License
sudo rm -rf ~/Library/Application\ Support/Resilio\ Sync/.SyncUser1510129113 ~/Library/Application\ Support/Resilio\ SyncLicense
chmod -R -w ~/Library/Application\ Support/Resilio\ Sync/.SyncUser1510129113 ~/Library/Application\ Support/Resilio\ SyncLicense

三、墙内使用rslsync

配置同步节点ip走代理:

1
2
173.244.217.42
209.95.56.60

MySQL多开

发表于 2017-11-03 | | 阅读次数

在服务器中开启mysql服务一般是用 service mysql start, 但在系统里面他都执行了那些命令吗,通过ps -ef|grep mysql 我们可以看到目标的任务有如:

1
2
3
4
5
/usr/local/Cellar/mysql/5.7.11/bin/mysqld --basedir=/usr/local/Cellar/mysql/5.7.11 --datadir=/usr/local/var/mysql --plugin-dir=/usr/local/Cellar/mysql/5.7.11/lib/plugin --bind-address=127.0.0.1 --log-error=/usr/local/var/mysql/mysql-error.log --pid-file=/usr/local/var/mysql/mysql.pid
或者可能是:
/usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/3306/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql/3306/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/data/mysql/3306/mysql_run.err --open-files-limit=65536 --pid-file=/data/mysql/3306/pid_mysql.pid --socket=/data/mysql/3306/mysqltmp/mysql.sock --port=3306

如果我们需要多开,只需要按照这种格式允许下不就好了?

这是个经过优化,在后台多开一个mysql实例的demo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
mysql_install_db --datadir=/Volumes/Edu/DB/mysql # mysql 5.7 前使用
mysqld --initialize --datadir=/Volumes/Edu/DB/mysql # mysql 5.7后使用这个初始化
mysqld --user=mysql --basedir=/usr/local/Cellar/mysql/5.7.11 --datadir=/Volumes/Edu/DB/mysql --initial --initialize-insecure --defaults-file=/usr/local/etc/my-3307.cnf --socket=/data/mysql/3306/mysqltmp/mysql.sock
--port=3307
--plugin-dir=/usr/local/Cellar/mysql/5.7.11/lib/plugin
--bind-address=127.0.0.1
--log-error=/usr/local/var/mysql/mysql-error-3307.log --pid-file=/usr/local/var/mysql/mysql-3307.pid
#需要先确保 datadir 目标目录下是空的,避免误操作破坏已有数据。
#另外,在初始化时如果加上 –initial-insecure,则会创建空密码的 root@localhost 账号,否则会创建带密码的 root@localhost 账号,密码直接写在 log-error 日志文件中(在5.6版本中是放在 ~/.mysql_secret 文件里,更加隐蔽,不熟悉的话可能会无所适从)
/usr/local/Cellar/mysql/5.7.11/bin/mysqld --basedir=/usr/local/Cellar/mysql/5.7.11 --datadir=/Volumes/Edu/DB/mysql --plugin-dir=/usr/local/Cellar/mysql/5.7.11/lib/plugin --bind-address=127.0.0.1 --log-error=/usr/local/var/mysql/mysql-error-3307.log --pid-file=/usr/local/var/mysql/mysql.pid --port=3307

launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql-3307.plist

Google Drive 服务器应用指南

发表于 2017-10-25 | | 阅读次数

一、gdrive cli命令安装

这个是比较通用的命令,centos7以下的推荐使用。

1
2
3
4
5
#下载命令工具
wget -O /usr/sbin/gdrive https://docs.google.com/uc?id=0B3X9GlR6EmbnQ0FtZmJJUXEyRTA
chmod 755 /usr/sbin/gdrive
#验证终端
gdrive about
  • 参考项目:https://github.com/prasmussen/gdrive#downloads

1.1 怎么使用gdrive

1
2
3
4
5
6
#gdrive 上传 tar 包到目录 0B2_oloQ2sUujdzFiYkNtOGhNMkU(用gdrive list查询google drive对应的目录地址),成功后删除 tar 包
/usr/sbin/gdrive upload -p 0B2_oloQ2sUujdzFiYkNtOGhNMkU --delete "/tmp/seonoco.com.tar.gz"
#上传目录
gdrive upload -p 0B1AsrnTQB-6rZ1JNWTBlMDFHdGs --recursive "/home/wwwroot/tmp"
gdrive download --recursive 0B1AsrnTQB-6rZ1JNWTBlMDFHdGs

另外,可使用gdrive help 与对应的命令 比如gdrive help upload查询详细的用法

同步上传

gdrive upload -p 1tGnCrN4XCaKI17oNW1UUwBMjextHwxpI –recursive “/home/wwwroot/sync/ebookplan”

gdrive [global] sync upload [options] Sync local directory to drive

1
2
3
4
5
6
7
8
9
10
11
12
gdrive sync upload "/home/wwwroot/sync/ebookplan" 1tGnCrN4XCaKI17oNW1UUwBMjextHwxpI
gdrive sync upload '/home/wwwroot/sync/kindlemate' 1mtcRv-OZTD8y05LUdBMlx2MNB88NzpKo
gdrive sync upload '/home/wwwroot/sync' 1PtAwU94atg4jJJKoV757yM9ncL0WBI4t
gdrive sync upload '/data/苏菇莨第一部分' 1DjotQOQuJNKTXh2SJESBYO3ThxYTvdI9 >> /data/logs/苏菇莨第一部分.log &
gdrive sync upload '/data/magzine' 1HpDYUFek1zvjPJ9tDRlrHQgWD4Hl-LcZ >> /data/logs/magzine.log &
gdrive sync upload '/data/magzine/财富' 1fi0b6jJlu3irO3CUICfmXKUI7bDAPhJM
gdrive sync upload '/home/wwwroot/ro.laikansha.com/xiake' 1atGHzcYdP81iivt36aG8mEd29ilb_I61

帮助

  • http://yulongniu.bionutshell.org/blog/2016/10/21/linux-sync-google-drive/
1…121314…26
Zack Hwang

Zack Hwang

Go

257 日志
42 分类
76 标签
RSS
Links
  • 小白博客
  • 我的书单
© 2018 Zack Hwang
由 Hexo 强力驱动
主题 - NexT.Muse
又拍云