Chrome源码编译

1.安装DirectX 2010 June
如果安装的时候出现失败“Error Code: S1023”,你需要打开添加删除程序,卸载
Microsoft Visual C++ 2010 x86 redistribuable – 10.0.( 数比30319大的)
Microsoft Visual C++ 2010 x64 redistribuable – 10.0.( 数比30319大的)

2.安装Visual Studio 2010

3.安装VS2010 SP1补丁包

4.安装Windows 8 SDK

5.修改Windows 8 SDK
将Windows 8 SDK安装目录下Includewinrtasyncinfo.h文件中的
enum class AsyncStatus {
改为enum /*class*/ AsyncStatus {

6.设置环境变量GYP_MSVS_VERSION=2010
2010为vs2010

7.获取depot_tools
https://src.chromium.org/svn/trunk/tools/depot_tools.zip
放在本地磁盘上并且把depot_tools目录添加到PATH环境变量里
运行命令gclient,会自动下载git、svn、python

8.下载Chromium源码包,不推荐使用svn下载
http://chromium-browser-source.commondatastorage.googleapis.com/chromium_tarball.html

9.创建文件%USERPROFILE%.gypinclude.gypi
在该文件中添加以下内容:
{‘variables’: {‘component’: ‘shared_library’}}

10.打开 chromiumhomesrc_tarballtarballchromiumsrcnative_clientbuildtoolchainbinaries.py 文件,将头部的“BASE_DOWNLOAD_URL”和“BASE_ONCE_DOWNLOAD_URL”中的https改为http

11.运行 gclient runhooks –force 生成sln解决方案文件,需要走代理
如果出现 UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xb0 in position 1: ordinal not in range(128)
解决方法:打开Python27Lib下的 mimetypes.py 文件,找到大概256行的 default_encoding = sys.getdefaultencoding() 在这行前面添加三行:
if sys.getdefaultencoding() != ‘gbk’:
reload(sys)
sys.setdefaultencoding(‘gbk’)

Nginx + php-fpm 性能优化

当nginx日志中出现:
connect() to unix:/var/run/php-fpm/php-fpm.sock failed (11:       Resource temporarily unavailable) while connecting to upstream, client: 127.0.0.1, server: 127.0.0.1, re      quest: "GET / HTTP/1.0", upstream: "fastcgi://unix:/var/run/php-fpm/php-fpm.sock:", host: "127.0.0.      1"

可以使用ip:port替换unix sock模式(不推荐)
{
vi /etc/php-fpm.d/www.conf
listen = /var/run/php-fpm/php-fpm.sock
to
listen = 127.0.0.1:9002

vi /etc/nginx/conf.d/default.conf
fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
to
fastcgi_pass   127.0.0.1:9002;
}

vi /etc/nginx/nginx.conf
修改 worker_processes 值为cpu核心数*2
...
events {
    use epoll;
    worker_connections  65535;
}
...
keepalive_requests 2048;
keepalive_timeout  30;
...
access_log  /var/log/nginx/access.log  main buffer=64k;
...
sendfile       on;
tcp_nopush     on;
aio            on;
...
client_body_buffer_size 16k;
client_max_body_size 8M;

修改内核网络连接数:
vi /etc/sysctl.conf
add:
net.core.somaxconn = 65535
net.core.netdev_max_backlog = 262144
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.ip_local_port_range = 1024 65000
net.ipv4.tcp_max_tw_buckets = 20000

sysctl -p

检查是否生效:
cat /proc/sys/net/core/somaxconn
sysctl -a | grep "netdev_max_backlog"
sysctl -a | grep "tcp_max_syn_backlog"

修改backlog大小,backlog的定义是已连接但未进行accept处理的SOCKET队列大小
vi /etc/php-fpm.d/www.conf
listen.backlog = -1
to
listen.backlog = 8192
...
pm.max_requests = 500
to
pm.max_requests = 1000

当nginx日志中出现:
nginx err.log : accept4() failed (24: Too many open files)
查看当前用户的打开文件数目:
ulimit -n
1024
略少,需增加

vi /etc/nginx/nginx.conf
add line behind line:pid        /var/run/nginx.pid;
worker_rlimit_nofile 655350;

修改系统允许打开文件数、进程数、待处理信号数:
vi /etc/security/limits.conf
*                soft    nofile          655360
*                hard    nofile          655360
*                soft    nproc           655350
*                hard    nproc           655350
*                soft    sigpending      20480
*                hard    sigpending      20480

要使 limits.conf 文件配置生效,必须要确保 pam_limits.so 文件被加入到启动文件中
vi /etc/pam.d/login
session    required     pam_limits.so

修改Nginx请求超时时长:
vi /etc/nginx/conf.d/default.conf
location ~ .php$ {
...
    fastcgi_index  index.php;
    fastcgi_connect_timeout 60;
    fastcgi_send_timeout 60;
    fastcgi_read_timeout 60;
...
}
vi /etc/php.ini
max_execution_time = 60
vi /etc/php-fpm.d/www.conf
request_terminate_timeout = 60

tail -f /var/log/messages 出现 kernel: nf_conntrack: table full, dropping packet
需要修改状态跟踪表的最大数,理论最大值 CONNTRACK_MAX = RAMSIZE (in bytes) / 16384 / (ARCH / 32)
以64G的64位操作系统为例,CONNTRACK_MAX = 64*1024*1024*1024/16384/2 = 2097152
查看当前值
sysctl net.netfilter.nf_conntrack_max
修改:
vi /etc/sysctl.conf
net.netfilter.nf_conntrack_max = 2097152

reboot
同一IP限速:
vi /etc/nginx/nginx.conf
http {
    ...

    limit_req_zone $binary_remote_addr zone=baism:10m rate=1r/s; 
    # 第一个参数:$binary_remote_addr 表示通过remote_addr这个标识来做限制,“binary_”的目的是缩写内存占用量,是限制同一客户端ip地址。
    # 第二个参数:zone=baism:10m表示生成一个大小为10M,名字为one的内存区域,用来存储访问的频次信息。
    # 第三个参数:rate=1r/s表示允许相同标识的客户端的访问频次,这里限制的是每秒1次,还可以有比如30r/m的。
    limit_conn_zone $binary_remote_addr zone=addr:10m;
}

vi /etc/nginx/conf.d/default.conf
server {
    ...
    location /abc {
        limit_req zone=baism burst=5 nodelay;
        # 第1个参数:zone=baism 设置使用哪个配置区域来做限制,与上面limit_req_zone 里的name对应。
        # 第2个参数:burst=5,重点说明一下这个配置,burst爆发的意思,这个配置的意思是设置一个大小为5的缓冲区当有大量请求(爆发)过来时,超过了访问频次限制的请求可以先放到这个缓冲区内。
        # 第3个参数:nodelay,如果设置,超过访问频次而且缓冲区也满了的时候就会直接返回503,如果没有设置,则所有请求会等待排队。
        limit_conn addr 1; # 只能同时建立一个链接
        #limit_rate 100k; # 最大传输速率
        limit_rate_after 500k; # 超过500k限制传输速率
    }
}

MySQL 5.7/8.0 优化

vi /etc/my.cnf
[mysqld]
...
performance_schema=off
ssl=off

关闭performance_schema和ssl可以降低cpu占用
MySQL 8.0 降低内存占用:
查看原始值:
show global variables like "performance_schema_max_table_instances";
-1
show global variables like "table_definition_cache";
2000
show global variables like "table_open_cache";
4000

vi /etc/my.cnf
performance_schema_max_table_instances=600
table_definition_cache=400
table_open_cache=256
查看密码安全验证级别:
mysql > SHOW VARIABLES LIKE '%validate_password_policy%';
临时修改:
mysql > SET GLOBAL validate_password_policy=0;
永久修改:
vi /etc/my.cnf
[mysqld]
validate_password_policy=0
或者卸载密码安全验证插件:
mysql > UNINSTALL PLUGIN validate_password;
如需重新安装此插件:
mysql > INSTALL PLUGIN validate_password SONAME 'validate_password.so';
tail -f /var/log/mysqld.log
发现错误:
[ERROR] Incorrect definition of table performance_schema.replication_connection_status: expected column 'RECEIVED_TRANSACTION_SET' at position 7 to have type longtext, found type text.
[ERROR] Incorrect definition of table performance_schema.replication_group_member_stats: expected column 'COUNT_TRANSACTIONS_ROWS_VALIDATING' at position 6, found 'COUNT_TRANSACTIONS_VALIDATING'.
解决方法:
mysql_upgrade -uroot -p
开启查询日志,性能开销极大,建议仅调试时临时开启:
SHOW GLOBAL VARIABLES LIKE 'general_%';
SET GLOBAL general_log=ON;

永久修改:
vi /etc/my.cnf
general_log=1
log_output=TABLE

参数说明:
log_output=[none|file|table|file,table]  #通用查询日志输出格式
general_log=[on|off]                     #是否启用通用查询日志
general_log_file[=filename]              #通用查询日志位置及名字

Restart MySQL databases. 
systemctl restart mysqld

Change the definition of "mysql.general_log" table. 
Switch the engine from CSV to MyISAM. To switch the engine from CSV to MyISAM, execute the following commands (the default is ENGINE=CSV).

mysql> SET GLOBAL general_log = 'OFF';
mysql> ALTER TABLE mysql.general_log ENGINE = MyISAM;
mysql> SET GLOBAL general_log = 'ON';

Check the definition of "mysql.general_log" table. Execute the following SQL command:
mysql> show create table mysql.general_log\G;
开启慢查询日志:
查看状态:
SHOW GLOBAL VARIABLES LIKE 'slow_%';
临时开启:
SET GLOBAL slow_launch_time=2;
SET GLOBAL slow_query_log=ON;
永久开启:
mkdir /var/log/mysql/
touch /var/log/mysql/error.log
touch /var/log/mysql/slow.log
chmod 777 /var/log/mysql/*
vi /etc/my.cnf
[mysqld]
slow_launch_time=2
slow_query_log=on
slow_query_log_file=/var/log/mysql/slow.log
...
log-error=/var/log/mysql/error.log

systemctl restart mysqld

rm /var/log/mysqld.log
使用jemalloc:
wget https://github.com/jemalloc/jemalloc/releases/download/4.4.0/jemalloc-4.4.0.tar.bz2
yum install bzip2
tar xjf jemalloc-4.4.0.tar.bz2
cd jemalloc-4.4.0
./configure
make && make install

cat /usr/lib/systemd/system/mysqld.service
文件中指定了环境变量值如下:
# Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql

vi /etc/sysconfig/mysql
LD_PRELOAD=/usr/local/lib/libjemalloc.so

systemctl restart mysqld

验证jemalloc优化是否生效:
yum install lsof
lsof -n | grep jemalloc

Windows SDK 8.1 安装 DirectShow

Windows SDK 8.1 默认不再自带 DirectShow,需要自行安装。
方法:
下载Windows SDK 7.1 x86,进入WinSDKSamples目录,执行安装,相关Samples(包含DirectShow)会被安装到C:\Program Files\Microsoft SDKs\Windows\v7.1

在 C:\Program Files\Microsoft SDKs\Windows\v7.1 下创建 Lib 目录,将DShow编译出的lib文件拷贝到这个目录下

Fedora 21/20 x64 安装搜狗拼音输入法

1、先卸载系统自带的Ibus输入法
sudo yum remove ibus
gsettings set org.gnome.settings-daemon.plugins.keyboard active false

2.安装Fcitx输入法
sudo yum install fcitx fcitx-pinyin

GNOME桌面:
sudo yum install fcitx-configtool
KDE桌面:
sudo yum install kcm-fcitx

查看Fictx版本
$fcitx --version
fcitx version: 4.2.8.3

3、配置一下Fcitx、在~/.bashrc添加如下内容
export GTK_IM_MODULE=fcitx  
export QT_IM_MODULE=fcitx  
export XMODIFIERS="@im=fcitx"

4.注销或重启后完成安装

5.安装搜狗输入法

5.1下载搜狗拼音linux输入法
http://pinyin.sogou.com/linux/

5.2解压压缩包 data.tar.xz
分配777权限,将 etc usr 分别拷贝到系统 /etc /usr 目录里

sudo cp /usr/lib/x86_64-linux-gnu/fcitx/fcitx-sogoupinyin.so /usr/lib64/fcitx/fcitx-sogoupinyin.so
需要执行下面这一条命令才能输入中文标点符号:
sudo ln -s /usr/lib/x86_64-linux-gnu/fcitx/fcitx-punc-ng.so /usr/lib64/fcitx/fcitx-punc-ng.so

5.3 启动
默认Ctrl + Space切换,这个快捷键不能被占用

在命令行中依次执行:
fcitx
sogou-qimpanel
查看缺失的lib并安装:
sudo yum install opencc

5.4配置
可以在右下角的隐藏任务栏里看到输入法图标,右键点击选择 设置
2015-03-08 更新:
安装 opencc 之后依旧提示:sogou-qimpanel: error while loading shared libraries: libopencc.so.1: cannot open shared object file: No such file or directory

此时检查 sogou-qimpanel 依赖库:
ldd /usr/bin/sogou-qimpanel
发现:
libopencc.so.1 => not found

查阅资料后发现 OpenCC 发布1.0.2版本后将原 /usr/lib/libopencc.so.1 升为 /usr/lib/libopencc.so.2

解决方法:
sudo ln -s /usr/lib64/libopencc.so.1.0.0 /usr/lib64/libopencc.so.1