如何用十条命令在一分钟内检查Linux服务器性能

如果你的Linux服务器突然负载暴增,报警短信快发爆你的手机,如何在最短时间内找出Linux性能问题所在?来看Netflix性能工程团队的这篇博文,看它们通过十条命令在一分钟内对机器性能问题进行诊断。
概述

通过执行以下命令,可以在1分钟内对系统资源使用情况有个大致的了解。

  • uptime
  • dmesg | tail
  • vmstat 1
  • mpstat -P ALL 1
  • pidstat 1
  • iostat -xz 1
  • free -m
  • sar -n DEV 1
  • sar -n TCP,ETCP 1
  • top

其中一些命令需要安装sysstat包,有一些由procps包提供。这些命令的输出,有助于快速定位性能瓶颈,检查出所有资源(CPU、内存、磁盘IO等)的利用率(utilization)、饱和度(saturation)和错误(error)度量,也就是所谓的USE方法。 Continue reading

Visual Studio Code之常备快捷键

官方快捷键大全:https://code.visualstudio.com/docs/customization/keybindings

Visual Studio Code是个牛逼的编辑器,启动非常快,完全可以用来代替其他文本文件编辑工具。又可以用来做开发,支持各种语言,相比其他IDE,轻量级完全可配置还集成Git感觉非常的适合前端开发。 所以我仔细研究了一下文档未来可能会作为主力工具使用。

主命令框

最重要的功能就是F1Ctrl+Shift+P打开的命令面板了,在这个命令框里可以执行VSCode的任何一条命令,甚至关闭这个编辑器。
按一下Backspace会进入到Ctrl+P模式里
Ctrl+P下输入>又可以回到Ctrl+Shift+P模式。
Ctrl+P窗口下还可以 Continue reading

让终端走代理的几种方法

方法1:

在终端中直接运行命令

export http_proxy=http://proxyAddress:port

这个办法的好处是简单直接,并且影响面很小(只对当前终端有效)。

方法2:

把代理服务器地址写入shell配置文件.bashrc或者.zshrc

直接在.bashrc或者.zshrc添加下面内容

export http_proxy="http://localhost:port" 
export https_proxy="http://localhost:port"

以使用shadowsocks代理为例,ss的代理端口为1080,那么应该设置为

export http_proxy="http://127.0.0.1:1080" 
export https_proxy="http://127.0.0.1:1080"

localhost就是一个域名,域名默认指向 127.0.0.1,两者是一样的。

然后ESC:wq保存文件,接着在终端中执行

source ~/.bashrc

或者退出当前终端再起一个终端。 这个办法的好处是把代理服务器永久保存了,下次就可以直接用了。 Continue reading

highcharts中对"另存为"进行汉化

$(function () {   
    var chart = new Highcharts.Chart({   
        chart: {   
            renderTo: 'container'  
        },   
       lang{   
                  printChart:"打印图表",
                  downloadJPEG: "下载JPEG 图片"  
                  downloadPDF: "下载PDF文档"  
                  downloadPNG: "下载PNG 图片"  
                  downloadSVG: "下载SVG 矢量图"  
                  exportButtonTitle: "导出图片"  
      },  
  .....
  })
})

windows下备份mysql数据库dos脚本

@echo off & setlocal ENABLEEXTENSIONS
:: ---------- 配置项 ----------
:: 备份放置的路径,加
set BACKUP_PATH=D:\Backup
:: 要备份的数据库名称,多个用空格分隔
set DATABASES=1688 abc ceshi
:: MySQL 用户名
set USERNAME=root
:: MySQL 密码
set PASSWORD=root
:: MySQL Bin 目录,加
:: 如果可以直接使用 dump(安装时添加 MySQL Bin 目录到了环境变量),此处留空即可
set MYSQL=D:\Progra~1\phpStudy\MySQL\bin\
:: WinRAR 自带命令行工具的可执行文件路径,长文件名注意用 Dos 长文件名书写方式
set WINRAR=D:\Progra~1\WinRAR\Rar.exe
:: ---------- 以下请勿修改 ----------
set YEAR=%date:~0,4%
set MONTH=%date:~5,2%
set DAY=%date:~8,2%
:: 如果在 dos 下输入 time 返回的不是 24 小时制(没有 0 填充),请自行修改此处
set HOUR=%time:~0,2%
set MINUTE=%time:~3,2%
set SECOND=%time:~6,2%
set DIR=%BACKUP_PATH%\%YEAR%-%MONTH%-%DAY%_%HOUR%%MINUTE%%SECOND%

set ADDON=%YEAR%%MONTH%%DAY%%HOUR%%MINUTE%%SECOND%
:: create dir
if not exist %DIR% (
mkdir %DIR% 2>nul
)

if not exist %DIR% (
echo Backup path: %DIR% not exists, create dir failed.
goto exit
)
cd /d %DIR%

:: backup
echo Start dump databases...
for %%D in (%DATABASES%) do (
echo Dumping database %%D ...
%MYSQL%mysqldump -u%USERNAME% -p%PASSWORD% %%D > %%D.%ADDON%.sql
:: winrar
if exist %WINRAR% (
%WINRAR% a -k -r -s -m1 -ep1 %%D.%ADDON%.rar %%D.%ADDON%.sql 2>null
del /F /S /Q %%D.%ADDON%.sql 2>null
)
)
echo Done
:exit

 

 

gitlab安装-设置1-修改仓库(repositories)的位置

安装好gitlab后,要将仓库(repositories)放在一个大硬盘上,在ubuntu服务器上安装的默认位置为 /var/opt/gitlab/git-data/ 目录,需要修改仓库对应的目录

操作步骤:

1:新建新仓库目录

mkdir -p /mnt/application/gitlab/git-data

2:修改配置文件 sudo vi /etc/gitlab/gitlab.rb
搜索:git_data_dir 修改成:git_data_dir "新目录"
如:

git_data_dir "/mnt/application/gitlab/git-data"

保存
3:重新生成gitlab

sudo gitlab-ctl reconfigure

生成不报错,而且在新建仓库目录可以看到从下的目录,即修改成功。

gitlab 邮箱配置

默认情况下,gitlab用qq邮箱注册是发送不出确认邮件的。

下面说说gitlab配置腾讯企业邮箱

# vim /etc/gitlab/gitlab.rb
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.exmail.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "support@ttlsa.com"
gitlab_rails['smtp_password'] = "www.ttlsa.com"
gitlab_rails['smtp_domain'] = "ttlsa.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true
gitlab_rails['gitlab_email_from'] = "support@ttlsa.com"

163邮箱

 gitlab_rails['smtp_enable'] = true
 gitlab_rails['smtp_address'] = "smtp.163.com"
 gitlab_rails['smtp_port'] = 25
 gitlab_rails['smtp_user_name'] = "sunxintao@163.com"
 gitlab_rails['smtp_password'] = "4578101"
 gitlab_rails['smtp_domain'] = "163.com"
 gitlab_rails['smtp_authentication'] = "login"
 gitlab_rails['smtp_enable_starttls_auto'] = true
 gitlab_rails['smtp_tls'] = false

重新加载配置

sudo gitlab-ctl reconfigure

发现目前qq邮箱已经不管用了,建议使用163邮箱

http://www.ttlsa.com/linux/howto-gitlab-using-qq-mailserver-send-mail/

多个项目在 Gitlab 中的组织方式

需求

按照 A_Company 目前的组织结构, 对于源代码的组织管理, 有如下需求:

  • 每个项目, 都隶属, 且仅仅隶属于一个部门
  • 每个员工, 可参与多个项目
  • 每个员工, 可参与不同部门的多个项目
  • 每个员工, 在不同的项目中可以有不同的权限

方案

  • 将 A_Company 的部门, 映射为 Gitlab 中的 Group
  • 将 A_Company 的员工, 映射为 Gitlab 中的 Member
  • 将 A_Company 的项目, 映射为 Gitlab 中的 Project

其中:

  • 每个项目, 都隶属, 且仅仅隶属于一个部门

  • 每个员工, 可参与多个项目 && 每个员工, 可参与不同部门的多个项目

  • 每个员工, 在不同的项目中可以有不同的权限

限制:

  • 不支持多级 group.
  • 不能将一个 group 的成员导入另外一个 group, 但可以将一个 project 的成员导入另外一个 project

参考资料

转自:http://liguanglei.name/blogs/2014/08/17/multi-projects-in-gitlab/

利用tcpdump抓取MySQL执行的SQL

http://ourmysql.com/archives/1358
编写脚本文件dumpsql.sh,内容如下:

#!/bin/bash
#this script used montor mysql network traffic.echo sql
tcpdump -i eth0 -s 0 -l -w - dst port 3306 | strings | perl -e '
while(<>) { chomp; next if /^[^ ]+[ ]*$/;
    if(/^(SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER|CALL)/i)
    {
        if (defined $q) { print "$q\n"; }
        $q=$_;
    } else {
        $_ =~ s/^[ \t]+//; $q.=" $_";
    }
}

运行并抓去sql的执行。

抓取后在当前目录出现out.log文件,执行strings out.log即可看到sql的运行情况

Git rebase和Git merge的区别

git rebase主要可以用来保持树的整洁,当多个开发协同的时候,一个开发者进行了多次的commit完成开发后,进行远程合并操作,接着第二个开发者也开发完毕,也同样进行了多次的commit也进行远程合并提交。这里系统会根据提交时间来将两个提交信息重新排序,在review的时候会非常让人头疼。而使用rebase的话,会保持每个开发者的提交日志。先将当前开发者的commit 以补丁的形式记录下来,此时还原到原来最新的分支状态,然后重新拉取远程的同步信息(其它开发者的提交),最后在本地再次应用补丁,这里就保持了每个开发者的提交顺序,并非按原来的那种每个commit的时间来排序,非常方便review. 对于merge会存在多个分支及合并提交信息。

假设你现在基于远程分支"origin",创建一个叫"mywork"的分支。

$ git checkout -b mywork origin

现在我们在这个分支做一些修改,然后生成两个提交(commit).

$ vi file.txt
$ git commit
$ vi otherfile.txt
$ git commit
...

但是与此同时,有些人也在"origin"分支上做了一些修改并且做了提交了. 这就意味着"origin"和"mywork"这两个分支各自"前进"了,它们之间"分叉"了。 Continue reading