Code Monkey home page Code Monkey logo

lyln.github.io's People

Contributors

lyln avatar

Stargazers

 avatar

Watchers

 avatar

lyln.github.io's Issues

MySQL索引常用操作

1、添加索引
alter table table_name add index idx_user_id (user_id);
2、删除索引
alter table table_name drop index idx_user_id;
3、查看索引
show index from table_name;
show key from table_name;
4、索引选择性
索引选择性=基数(Cardinality)/数据行
select count(distinct(chat_id))/count(1) from s_chat;
计算全列选择性
SELECT COUNT(DISTINCT col_name)/COUNT(*) FROM tbl_name;

计算不同长度前缀的选择率,选择与全列选择率最接近的长度
SELECT COUNT(DISTINCT LEFT(col_name, 3))/COUNT() AS sel3,
COUNT(DISTINCT LEFT(col_name, 4))/COUNT(
) AS sel4,
COUNT(DISTINCT LEFT(col_name, 5))/COUNT() AS sel5,
COUNT(DISTINCT LEFT(col_name, 6))/COUNT(
) AS sel6,
COUNT(DISTINCT LEFT(col_name, 7))/COUNT(*) AS sel7
FROM tbl_name;

mysqldump 常用命令

mysqldump 常用参数
---opt start ---
--opt Same as --add-drop-table, --add-locks, --create-options,--quick,
--extended-insert, --lock-tables, --set-charset,
and --disable-keys. Enabled by default, disable with --skip-opt.
--add-drop-table Add DROP TABLE statement before each CREATE TABLE statement
--add-locks Surround each table dump with LOCK TABLES and UNLOCK TABLES statements
--create-options Include all MySQL-specific table options in CREATE TABLE statements
--disable-keys For each table, surround INSERT statements with statements to disable and enable keys
--extended-insert Use multiple-row INSERT syntax
-e, --extended-insert (Defaults to on; use --skip-extended-insert to disable.)
--lock-tables Lock all tables before dumping them
-l myisam存储引擎备份添加-l参数
--quick Retrieve rows for a table from the server a row at a time
-q, --quick Don't buffer query, dump directly to stdout.
(Defaults to on; use --skip-quick to disable.)
--set-charset Add SET NAMES default_character_set to output
---opt end ---

--single-transaction innodb存储引擎得到一个snapshot,使得数据能够保证一致性。
--flush-logs, -F
-F Flush logs file in server before starting dump. Note that
if you dump many databases at once (using the option
--databases= or --all-databases), the logs will be
flushed for each database dumped. The exception is when
using --lock-all-tables or --master-data: in this case
the logs will be flushed only once, corresponding to the
moment all tables are locked. So if you want your dump
and the log flush to happen at the same exact moment you
should use --lock-all-tables or --master-data with
--flush-logs.

--no-data, -d No row information. 只导出表结构,不导出数据。

--master-data=2 代表备份时刻记录 binlog 的文件和postion,并注释。
--master-data=1 记录binlog文件和pos,写入文件。

< CHANGE MASTER TO MASTER_LOG_FILE='bin.000021', MASTER_LOG_POS=194;

---
> -- CHANGE MASTER TO MASTER_LOG_FILE='bin.000021', MASTER_LOG_POS=194;

--single-transaction 获取一致性快照
-R 备份存储过程和函数
-R, --routines Dump stored routines (functions and procedures).
--triggres 备份触发器
--triggers Dump triggers for each dumped table.
(Defaults to on; use --skip-triggers to disable.)
-A 表示备份所有的库

1.备份所有库
mysqldump -uljd -p --all-databases > all.sql
mysqldump --master-data=2 --single-transaction -R --triggers -A >> all.sql
2.备份db1,db2库的数据
mysqldump -uljd -p --databases db1 db2 > db1_2.sql
3.条件导出
mysqldump -uljd -p -S/tmp/mysql.sock1 -B bak --tables sbtest1 --where 'id < 10' --skip-extended-insert > less10.sql
4.只导出表结构,不导出数据
mysqldump -uljd -p -S/tmp/mysql.sock1 -B bak --tables sbtest1 -d --skip-extended-insert > less10.sql

Percona Monitoring Plugins for Zabbix 监控模板说明

InnoDB Adaptive Hash Index

显示“自适应哈希索引”的使用情况,哈希索引只能用来搜索等值的查询。
Hash Index Cells Total
自适应哈希表的槽数=innodb_buffer_pool_size/256
Hash Index Cells Used
用到自适应哈希表的查询个数

InnoDB Buffer Pool

Pool Size
InnoDB缓冲池的页数量,每页大小16K
Database Pages
数据页大小
Free Pages
空闲页大小
Modified Pages
"脏"数据页.如果脏数据页太多,则需要检查磁盘IO状态.

InnoDB Buffer Pool Activity

显示Innodb缓冲池的内部活动,页的创建,读取,写入.如果有突然的增加或者减少,需要检查应用

InnoDB Checkpoint Age

Uncheckpointed Bytes
显示了未写入磁盘的数据量.如果该值的大小接近innodb_log_file_size * n 的总大小,则需要增加innodb_log_file_size的值,但是要注意,如果发生宕机,则需要更长的回复时间.(从redolog恢复)

InnoDB Current Lock Waits

InnoDB Lock Wait Secs
显示每秒处于锁等待的innodb事务总数.如果有一个非常大的值,应该检查LOCK WAIT transactions,请看下面的模板

InnoDB Transactions Active/Locked

该图显示了InnoDB事务的状态数量.
Active Transactions
正在执行的事务数量
Locked Transactions
锁住的事务数量
Current Transactions
当前的事务数量(包括not started,ACTIVE,...等各种状态)
not started # 事务已经提交到磁盘
ACTIVE # 正在执行的事务

InnoDB Transactions

显示了InnoDB事务相关的信息
InnoDB Transactions
InnoDB内部的事务总数.由以下数值计算出:
Trx id counter 89F56195 # 当前事务ID,每创建一个新事务就会累加
Purge done for trx's n:o < 89F5609C undo n:o < 0 # InnoDB清除旧版本MVCC时所用的事务ID.这个ID之前的老版本数据已经清除.
该数值就是由当前事务ID减去清除旧数据的事务ID再由十六进制转成十进制的值.(参考ss_get_mysql_stats.php脚本902行)
History List
历史记录的长度.位于InnoDB数据文件的撤销空间里的未清除事务的数目.当一个事务执行了更新并提交后,这个数字就会累加,当清除进程移除一个旧版本数据时,它就会递减.

InnoDB I/O

File Reads
显示每秒文件的读次数
File Writes
显示每秒文件的写次数
Log Writes
写日志的次数
File Fsyncs
调用fsync()函数的次数.与innodb_flush_log_at_trx_commit值的设置有关.

InnoDB I/O Pending

显示了InnoDB挂起的同步或异步IO操作.如果挂起的操作太多,则需要更大的RAM,更大的缓冲池,更快的磁盘.
Pending Aio Log Ios
Pending Aio Sync Ios
Pending Buf Pool Flushes
Pending Chkp Writes
Pending Ibuf Aio Reads
Pending Log Flushe
Pending Log Writes
Pending Normal Aio Reads
Pending Normal Aio Writes

InnoDB Insert Buffer

插入缓冲,并不是缓存的一部分,而是物理页,对于非聚集索引的插入或更新操作,不是每一次直接插入索引页.而是先判断插入的非聚集索引页是否在缓冲池中.如果在,则直接插入,如果不再,则先放入一个插入缓冲区中.然后再以一定的频率执行插入缓冲和非聚集索引页子节点的合并操作.
使用条件:非聚集索引,非唯一
Ibuf Inserts
插入的记录数
Ibuf Merged
合并的页的数量
Ibuf Merges
合并的次数
如果merges/merged的值等于3/1,则代表插入缓冲对于非聚集索引页的IO请求大约降低了3倍

InnoDB Insert Buffer Usage

buf Cell Count
分段大小
Ibuf Used Cells
插入缓冲区的大小
Ibuf Free Cells
"自由列表"的长度

InnoDB Internal Hash Memory Usage

显示了InnoDB内部各种哈希结构(不可人工干预),占用的内存大小.
Adaptive Hash Memory
自适应哈希索引占用的内存大小
Page Hash Memory
Dictionary Cache Memory
File System Memory
Lock System Memory
Recovery System Memory
Thread Hash Memory

InnoDB Lock Structures

InnoDB Lock Structs
该图形显示了在innodb内部有多少锁结构(不是死锁).这大致与当前事务锁住的行数有关系.可以用来判断是否存在锁争用.
对于数量多少算好或者算坏,没有硬性的规定.实际情况下,大量的事务在等待锁,很明显,该值越小越好.
这个数据来源是SHOW ENGINE INNODB STATUS;
23 lock struct(s), heap size 3024, undo log entries 27
LOCK WAIT 12 lock struct(s), heap size 3024, undo log entries 5
LOCK WAIT 2 lock struct(s), heap size 368

InnoDB Log

InnoDB Log Buffer Size
Log Bytes Written
Log sequence number
当前日志的位置
Log Bytes Flushed
Log flushed up to
日志已经刷新的位置
Unflushed Log
是log_bytes_written与log_bytes_flushed的差值,表示日志缓存区里还有多少数据没被刷新到日志文件里.
如果这个差值超过了innodb_log_buffer_size设置的30%,则需要考虑是否加大该参数值.

InnoDB Memory Allocation

Total memory allocated 8824815616; in additional pool allocated 0
Total Mem Alloc
InnoDB申请的总内存量,单位字节
Additional Pool Alloc
分配给额外内存的总量,单位字节

InnoDB Row Lock Time

InnoDB Row Lock Time
该模板读取的Innodb_row_lock_time状态变量,表示InnoDB引擎在每次申请数据行锁定时等待的总时间(以毫秒为单位).

InnoDB Row Lock Waits

InnoDB Row Lock Waits
读取的Innodb_row_lock_waits状态变量,表示InnoDB经过这么长时间才获得一个行锁.(毫秒)

InnoDB Row Operations

Number of rows inserted 50678311, updated 66425915, deleted 20605903, read 454561562
大致能表现InnoDB内部的操作
Row Read
Row Deleted
Row Updated
Row Inserted

InnoDB Semaphores Wait Time

InnoDB Sem Wait Time Ms
显示当前正在等待互斥量的InnoDB线程的等待时间的总耗时(毫秒).
分析:
正常情况下,InnoDB Semaphores Wait Time和 InnoDB Semaphores Waits应该是空的.除非服务器运行着高并发的工作负载,它促使InnoDB采取让操作系统等待的措施.信息位于SHOW ENGINE INNODB STATUS的SEMAPHORES片段.
相关php脚本代码部分如下:
elseif (strpos($line, 'seconds the semaphore:') > 0) {
# --Thread 907205 has waited at handler/ha_innodb.cc line 7156 for 1.00 seconds the semaphore:
increment($results, 'innodb_sem_waits', 1);
increment($results, 'innodb_sem_wait_time_ms', to_int($row[9]) * 1000);
}
其中innodb_sem_waits的值是多少,表示有多少线程在等待,而innodb_sem_wait_time_ms表示所有线程等待的时间,默认单位是秒,在脚本中乘以1000,所以监控图中的单位是毫秒.
应对这个问题
InnoDB采取多阶段等待策略.首先,尝试对锁进行循环等待.如果经过了一个预设的循环等待周期(innodb_sync_spin_loops = 30,当前配置文件默认为30次)之后还没有成功,就会退到更昂贵更复杂的等待阵列里,如果并发量太大的话,则导致系统负载突增.
循环等待的成本相对比较低,但是需要不停地检查一个资源是否被锁定,消耗CPU周期,也就是说,当另外一条线程能处理事情时,循环等待也会独占处理器.
循环等待的替换方案就是让操作系统做上下文切换(等待阵列),每秒钟几千次的切换会引发大量的系统开销.
解决办法
根据具体的应用,调整参数;或者优化应用,减少并发.

InnoDB Semaphores Waits

InnoDB Sem Waits
显示当前正在等待互斥量的InnoDB线程的数量

InnoDB Semaphores

显示innodb内部的信号活动状态.
包括Mutex spin waits,RW-shared spins,RW-excl spins等各种信号量的数量总和.
Spin Rounds
InnoDB内部预设的互斥量信号数量
Spin Waits
InnoDB内部对锁进行循环等待的数量(与innodb_sync_spin_loops参数有关)
Os Wait系统等待
事务退到操作系统的等待阵列的数量
在高并发的情况,会发现这个值有尖峰状,不稳定.图像主要显示了,不合理的设计情况下,不同的连接类型之间的行锁或互斥锁的争用.

InnoDB Tables In Use

mysql tables in use 2, locked 2
InnoDB Tables In Use
所有事务用到的表的数量
InnoDB Locked Tables
所有事务锁定的表的数量

MyISAM Indexs

显示了在MyISAM索引上的读写情况
Key Reads Requests
从键缓存读出索引块的读操作的次数
Key Reads
从磁盘读出索引块的读操作次数
Key Write Requests
向键缓存写一个索引块的请求的个数
Key Writes
把索引块写入磁盘的写操作的次数

MyISAM Key Cache

Key Buffer Size
键缓存大小
Key Buf Bytes Used
同Key_blocks_used变量
键缓存里已经被使用的缓存块的个数
Key Buf Bytes Unused
同Key_blocks_unused
键缓存里尚未被使用过的缓存块的个数

MySQL Binary/Relay Logs

Binlog Cache Use
保存在二进制日志缓存里的事务的个数
Binlog Cache Disk Use
超过binlog_cache_size设置的缓存大小,使用磁盘临时文件的事务的个数
Binlog Log Space
二进制日志的大小
Relay Log Space
中继日志的大小
如果Binlog Cache Disk Use/Binlog Cache Use的值较大,那么应该尝试增加binlog_cache_size的大小.但是,也不要期望改善过多,如果写临时文件的数量从每秒1个减少到每分钟一个,这已经证明优化的足够好了.没必要耗费大量的内存,来处理binlog_cache_size中的事务.

MySQL Command Counts

命令计数器,显示了MySQL(在过去1秒内)执行各种命令的次数
Questions
记录了服务器收到的查询和命令的总数.(Com_*变量的总数不一定相等.)
Com Select
Com Delete
Com Insert
Com Update
Com Replace
Com Load
Com Delete Multi
Com Insert Select
Com Update Multi
Com Replace Select

MySQL Connections

Max Connections
允许同时保持在打开状态的客户连接的最大个数
Max Used Connections
此前曾同时打开处于打开状态的连接的最大个数
Aborted Clients
因客户端没有正确地关闭而被丢弃的连接的个数
Aborted Connects
试图连接MySQL服务器但没有成功的次数
Threads Connectd
现在正处于打开状态的连接的个数
Connections
试图连接MySQL服务器的尝试次数

MySQL Files and Tables

Table Cache
Open Tables
当前处于打开状态的数据表的个数.不包括TEMPORARY
Open Files
当前处于打开状态的文件的个数,如果与open_files_limit接近,则应该加大open_files_limit的值.
Opened Tables
MySQL服务器已打开的数据表总数(包括显式定义的临时表).如果这个值很高,应该慎重考虑,是否加大数据表缓存(table_open_cache).

MySQL Handler

Handler_writer 向数据表里插入一个数据行的请求的个数
Handler_update 对数据表里的一个数据行进行修改的请求的个数
Handler_delete 从数据表删除一个数据行的请求的个数
Handler_read_first 读取索引中第一个索引项的请求的个数
Handler_read_key 根据一个索引值而读取一个数据行的请求的个数
Handler_read_next 按索引顺序读取下一个数据行的请求的个数
Handler_read_prev 按索引逆序读取前一个数据行的请求的个数
Handler_read_rnd 根据某个数据行的位置而读取该数据行的请求的个数
Handler_read_rnd_next 读取下一个数据行的请求的个数.如果这个数字很高,就说明有很多语句需要通过全表扫描才能完成或有很多查询没有使用适当的索引

MySQL Network Traffic

Bytes Send
发送字节数
Bytes Received
收到字节数

MySQL Replication

默认用SHOW SLAVE STATUS命令获取各状态值
Slave Running
从服务器的I/O线程和SQL线程是否在运行
Slave Stopped
Slave Lag
复制延迟
Slave Open Tmp Tables
从服务器中的SQL线程曾经打开的临时文件的个数
Slave Retried Transactions
从服务器中的SQL线程重新尝试执行一个事务的次数

MySQL Select Types

Select Full Join
没有使用索引而完成的多表联接操作的次数.这种情况是性能杀手,最好去优化sql.
Select Full Range Join
利用一个辅助性的参照表(reference table)上的区间搜索(range search)操作而完成的多数据表联接操作的次数.
该值表示使用了范围查询联接表的次数.
Select Range
利用第一个数据表上的某个区间而完成的多数据表联接操作的次数.
Select Range Check
该变量记录了在联接时,对每一行数据重新检查索引的查询计划的数量,它的开销很大.
如果该值较高或正在增加,说明一些查询没有找到好索引.
Select Scan
通过对第一个数据表进行全表扫描而完成的多数据表联接操作的次数.

MySQL Sorts

Sort Rows
对多少行排序
Sort Range
利用一个区间进行的排序操作的次数
Sort Merge Passes
查询导致了文件排序的次数.可以优化sql或者适当增加sort_buffer_size变量
Sort Scan
利用一次全表扫作而完成的排序操作的次数

MySQL Table Locks

Table Locks Immediate
无需等待就能够立刻得到满足的数据表锁定请求的个数
Table Locks Waited
显示了有多少表被锁住了并且导致服务器级的锁等待(存储引擎级的锁,如InnoDB行级锁,不会使该变量增加).
如果这个值比较高或者正在增加,那么表明存在严重的并发瓶颈.
Slow Queries
慢查询的次数(执行时间超过long_query_time值)

MySQL Temporary Objects

Created_tmp_tables
MySQL服务器在对SQL查询语句进行处理时在内存里创建的临时数据表的个数.
如果该值太高,唯一的解决办法是:优化查询语句.
Created_tmp_disk_tables
MySQL服务器在对SQL查询语句进行处理时在磁盘上创建的临时数据表的个数,如果这个值比较高,可能的原因:
a.查询在选择BLOB或者TEXT列的时候创建了临时表
b.tmp_table_size和max_heap_table_size的值也许太小
Created_tmp_files
MySQL服务器所创建的临时文件的个数

MySQL Threads

Thread Cache Size
线程缓存所能容纳的线程的最大个数.断开的mysql连接会放到这个缓存里,新建立的连接就会重复使用它们而不创建新的线程.
如果缓存中有自由的线程,MySQL就能很快的响应连接请求,不必为每个连接都创建新的线程.每个在缓存中的线程通常消耗256KB内存.
Thread Created
为处理连接创建的线程总数

MySQL Transaction Handler

Handler Commit
提交一个事务的请求的个数
Handler Rollback
回滚一个事务的请求的个数
Handler Savepoint
创建一个事务保存点的请求的个数
Handler Savepoint Rollback
回滚到一个事务保存点的请求的个数.

KafkaOffsetMonitor重启脚本

#!/bin/bash
set -x
function start {
        /usr/local/jdk/bin/java -Xmx512M -Xms512M -cp KafkaOffsetMonitor-assembly-0.2.1.jar com.quantifind.kafka.offsetapp.OffsetGetterWeb \
        --zk 192.168.1.100:2181/kafka \
        --port 9090 \
        --refresh 1.minutes \
        --retain 2.days >> /data/KafkaMonitor/kafkamonitor.log 2>&1 &

}
function stop {
        jps -ml |grep OffsetGetterWeb |cut -d' ' -f1| xargs kill
}

case "$1" in
        start)
              start
        ;;
        stop)
              stop
        ;;
        restart)
              stop
              start
        ;;
        *)
        echo "Usage: $0 {start | stop | restart}"
esac

MySql表添加key分区

1、创建与原表结构相同的表

CREATE TABLE `new_table` (
  `chat_id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `user_id` bigint(20) DEFAULT NULL,
  `create_time` datetime DEFAULT NULL,
  `update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`chat_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
PARTITION BY KEY (chat_id)
PARTITIONS 200 ;

2、插入原表数据
insert into new_table select * from old_table
3、重命名表明
RENAME TABLE old_table TO new_table;

Win下快速安装MySQL

1、官网下载
Windows (x86, 64-bit), ZIP Archive
2、初始化数据库
进入D:\mysql\bin执行
mysqld.exe --initialize
3、安装mysqld服务
mysqld.exe install mysqld --defaults-file="D:\mysql\my.ini"
4、启动mysqld
net start mysqld

notes:
1、查看帮助
mysqld.exe --verbose --help
2、移除mysqld服务
mysqld.exe remove mysqld --defaults-file="D:\mysql\my.ini"
3、启动失败看data下的err log

Tomcat配置与优化

加速启动/opt/tomcat/bin/catalina.sh

CATALINA_OPTS="-Djava.security.egd=file:/dev/./urandom"

修改启动初始化

JAVA_OPTS="-server $JAVA_OPTS $JSSE_OPTS -Xms2048m -Xmx2048m -XX:+UseParallelGC  -XX:+DisableExplicitGC"

-Xms128m JVM初始分配的堆内存
-Xmx512m JVM最大允许分配的堆内存,按需分配
-XX:+DisableExplicitGC 忽略手动调用 GC 的代码使得 System.gc() 的调用就会变成一个空调用,完全不会触发任何 GC

Tomcat8.0 后,PermSize与MaxPermSize参数取消。
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=256M; support was removed in 8.0
Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512m; support was removed in 8.0
-XX:PermSize=64M JVM初始分配的非堆内存
-XX:MaxPermSize=128M JVM最大允许分配的非堆内存,按需分配

堆内存分配
JVM初始分配的堆内存由-Xms指定,默认是物理内存的1/64;JVM最大分配的堆内存由-Xmx指定,默认是物理内存的1/4。默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制;
空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制。因此服务器一般设置-Xms、-Xmx 相等以避免在每次GC 后调整堆的大小。

非堆内存分配
JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64;由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4。(还有一说:MaxPermSize缺省值和-server -client选项相关,
-server选项下默认MaxPermSize为64m,-client选项下默认MaxPermSize为32m。这个我没有实验。)
上面错误信息中的PermGen space的全称是Permanent Generation space,是指内存的永久保存区域。还没有弄明白PermGen space是属于非堆内存,还是就是非堆内存,但至少是属于了。
XX:MaxPermSize设置过小会导致java.lang.OutOfMemoryError: PermGen space 就是内存益出。

隐藏tomcat版本信息

tomcat/lib/catalina.jar
解压
jar xf catalina.jar org/apache/catalina/util/ServerInfo.properties
修改

server.info=Apache Tomcat
server.number=
server.built=

更新
jar uf catalina.jar org/apache/catalina/util/ServerInfo.properties

添加虚拟主机

修改conf/server.xml,添加

<Host name="huaxiu.tv" debug="0" appBase="webapps" autoDeploy="true" 
xmlValidation="false" xmlNamespaceAware="false"> 
<Alias>huaxiuvr.com</Alias>
<Alias>huaxiuvr.cn</Alias>
<Context path="" docBase="./huaxiu" debug="1" reloadable="true" allowLinking="true"></Context> 
</Host>

关闭自动war包自动更新。
autoDeploy="false"
项目目录:webapps/huaxiu
多个域名:huaxiu.tv,huaxiuvr.com,huaxiuvr.cn

Node版本安装

安装一个 nvm( https://github.com/creationix/nvm

$ curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.25.2/install.sh | bash
nvm 的全称是 Node Version Manager,之所以需要这个工具,是因为 Node.js 的各种特性都没有稳定下来,所以我们经常由于老项目或尝新的原因,需要切换各种版本。

安装完成后,你的 shell 里面应该就有个 nvm 命令了,调用它试试
$ nvm
当看到有输出时,则 nvm 安装成功。

安装 Node.js

使用 nvm 的命令安装 Node.js 最新稳定版,现在是 v0.12.3。
$ nvm install 0.12
安装完成后,查看一下
$ nvm ls

$ nvm use 0.12
然后再次查看,这时候小箭头应该出现了。

OK,我们在终端中输入
$ node
REPL(read–eval–print loop) 应该就出来了,那我们就成功了。

随便敲两行命令玩玩吧。

比如 > while (true) {},这时你的 CPU 应该会飚高。

完善安装

上述过程完成后,有时会出现,当开启一个新的 shell 窗口时,找不到 node 命令的情况。

这种情况一般来自两个原因

一、shell 不知道 nvm 的存在

二、nvm 已经存在,但是没有 default 的 Node.js 版本可用。

解决方式:

一、检查 ~/.profile 或者 ~/.bash_profile 中有没有这样两句

export NVM_DIR="/Users/YOURUSERNAME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
没有的话,加进去。

这两句会在 bash 启动的时候被调用,然后注册 nvm 命令。

二、

调用

$ nvm ls

看看像不像上述图1中一样,有 default 的指向。

如果没有的话,执行

$ nvm alias default 0.12

$ nvm ls

看一下

nc和nmap的小例子

通过nc两台机器简单交互聊天
server: nc -l 1234
client: nc 192.168.1.87 1234

通过nc传输文件
server: nc -lp 1234 > install.log
client: nc 192.168.1.87 1234 < nginx.conf

仅列出指定网络上的每台主机,不发送任何报文到目标主机:
nmap -sL 192.168.1.0/24
进行ping扫描,打印出对扫描做出响应的主机,不做进一步测试(如端口扫描或者操作系统探测):
nmap -sP 192.168.1.0/24
探测目标主机开放的端口,可以指定一个以逗号分隔的端口列表(如-PS22,23,25,80):
nmap -PS 192.168.1.234

MySQL join语句

创建a,b表

CREATE TABLE `a` (
  `a` int(11) DEFAULT NULL,
  `name` varchar(10) DEFAULT NULL
) 

+------+-------+
| a    | name  |
+------+-------+
|    1 | peter |
|    2 | jack  |
|    3 | lala  |
+------+-------+

CREATE TABLE `b` (
  `b` int(11) DEFAULT NULL,
  `name` varchar(10) DEFAULT NULL
)

+------+-------+
| b    | name  |
+------+-------+
|    1 | kaka  |
|    2 | peter |
|    3 | jack  |
+------+-------+

a,b 的交集(默认INNER)

select * from a,b where a.name=b.name;
select * from a join b on a.name=b.name;

+------+-------+------+-------+
| a    | name  | b    | name  |
+------+-------+------+-------+
|    1 | peter |    2 | peter |
|    2 | jack  |    3 | jack  |
+------+-------+------+-------+

只在a表,不在b表记录

select * from a left join b on a.name=b.name where b.name is null;

+------+------+------+------+
| a    | name | b    | name |
+------+------+------+------+
|    3 | lala | NULL | NULL |
+------+------+------+------+

a,b 的全集(Mysql不支持full)

select * from a left join b on a.name=b.name union  select * from a right join b on a.name=b.name;

a,b的关联更新

update a join b on a.name=b.name set a.a=11;

sql join

Ubuntu下 Zabbix扩展 Percona插件监控 MySQL

Percona Monitoring Plugins for Zabbix
1、安装zabbix agent
Zabbix 2.2 for Ubuntu 12.04 LTS:
# wget http://repo.zabbix.com/zabbix/2.2/ubuntu/pool/main/z/zabbix-release/zabbix-release_2.2-1+precise_all.deb
# dpkg -i zabbix-release_2.2-1+precise_all.deb
# apt-get update
# apt-get install zabbix-agent

2、修改agent配置
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=zabbix.server
ServerActive=zabbix.server:10051
Hostname=zabbix.client
RefreshActiveChecks=300
Timeout=30
Include=/etc/zabbix/zabbix_agentd.d/

3、重启agent 测试agent是否ok
zabbix_get -s zabbix.client -p 10050 -k "system.cpu.load[all,avg1]"

4、Percona 监控mysql 插件
Installing Percona Server from Percona apt repository
wget https://repo.percona.com/apt/percona-release_0.1-3.$(lsb_release -sc)_all.deb
dpkg -i percona-release_0.1-3.$(lsb_release -sc)_all.deb
sudo apt-get update
apt-get install percona-zabbix-templates

5、后续的一系列操作
安装后会将相应配置默认放到/var/lib/zabbix/percona/
cp scripts 到/etc/zabbix/scripts 并修改所属用户和所属组
cp userparameter_percona_mysql.conf 到/etc/zabbix/zabbix_agentd.d
安装php环境
apt-get install php5-cli
apt-get install php5-mysql
授权监控用户
create user 'zabbix'@'localhost' identified by 'zabbixadmin';
GRANT SELECT, SUPER, PROCESS ON . TO 'zabbix'@'localhost';
测试脚本
php ss_get_mysql_stats.php --host localhost --items gg

6、zabbix server测试
`zabbix_get -s 127.0.0.1 -p 10050 -k "MySQL.max-connections"

notes:
1、ERROR: Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'
ln -s /tmp/mysql.sock /var/run/mysqld/mysqld.sock
2、Slave Running提示不可用,用户名密码不对。

cat /etc/passwod
zabbix:x:105:112::/var/lib/zabbix/:/bin/false

找到zabbix的home目录,添加 .my.cnf文件

[client]
user=zabbix
password='zabbixadmin'

3、zabbix远程拉起脚本
sudoers开启zabbix用户免密码

zabbix  ALL=NOPASSWD: ALL
allows 'zabbix' user to restart apache without password.
zabbix ALL=NOPASSWD: /etc/init.d/apache restart

zabbix_agentd.conf打开
EnableRemoteCommands=1
4、zabbix_get执行脚本时报错:
(Not all processes could be identified, non-owned process info
will not be shown, you would have to be root to see it all.
chmod +s /bin/netstat
脚本其他用户有可执行权限
links:
https://www.percona.com/doc/percona-monitoring-plugins/1.1/zabbix/index.html
https://www.zabbix.com/documentation/2.2/manual/installation/install_from_packages

MySQL sys库

查看没有主键的表

SELECT DISTINCT t.table_schema, t.table_name
FROM information_schema.tables AS t
LEFT JOIN information_schema.columns AS c ON t.table_schema = c.table_schema AND t.table_name = c.table_name AND c.column_key = "PRI"
WHERE t.table_schema NOT IN ('information_schema', 'mysql', 'performance_schema')
AND c.table_name IS NULL AND t.table_type != 'VIEW';

查看冗余索引
select * from sys.schema_redundant_indexes\G

未使用的索引
select * from schema_unused_indexes\G

查看使用全表扫描的SQL语句
select * from schema_tables_with_full_table_scans\G

php win开发环境

php自带webserver
php -S 0.0.0.0 -t 'project_name'
复制php.ini-development为php.ini,做如下修改

  1. 关闭错误的Notice提示
    error_reporting = E_ALL
    改为
    error_reporting = E_ALL & ~E_NOTICE
  2. 设置ext的目录
    ; extension_dir = "ext"
    去掉注释,变为
    extension_dir = "ext"
  3. 打开扩展
    分别找到如下几行,将前面的;去除
    ;extension=php_fileinfo.dll
    ;extension=php_gd2.dll
    ;extension=php_intl.dll
    ;extension=php_mbstring.dll
    ;extension=php_openssl.dll
    ;extension=php_pdo_mysql.dll
    ;extension=php_pdo_sqlite.dll
    extension=php_memcache.dll 复制PhpDemo下develop_env对应php版本的dll
  4. 设置 date.timezone
    date.timezone = Asia/Shanghai
  5. 关闭 expose_php
    expose_php = off

MySQL 物理恢复小结

  1. 拷贝备份的物理目录
  2. 多实例下添加新的实例
[mysqld3]
innodb-page-size=16384  # 默认16k
server-id = 1134
socket = /tmp/mysql.sock3
port = 3309
pid-file = /data/new/mysql.pid
basedir = /usr/local/mysql
datadir = /data/new
log_error = /data/new/error.log
  1. 启动新的实例
    启动失败,查看错误log,修改innodb-page-size大小
[ERROR] InnoDB: innodb-page-size mismatch in data file ./ibdata1
[ERROR] InnoDB: Could not open or create the system tablespace. If you tried to add new data files to the system tablespace, 
and it failed here, you should now edit innodb_data_file_path in my.cnf back to what it was, 
and remove the new ibdata files InnoDB created in this failed attempt. 
InnoDB only wrote those files full of zeros, but did not yet use them in any way. 
But be careful: do not remove old data files which contain your precious data!

js跳转

移动端跳转

<script type="text/javascript">
/*
* 智能机浏览器版本信息:
*
*/
var browser = {
versions: function() {
var u = navigator.userAgent, app = navigator.appVersion;
return {//移动终端浏览器版本信息 
trident: u.indexOf('Trident') > -1, //IE内核
presto: u.indexOf('Presto') > -1, //opera内核
webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核
gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐内核
mobile: !!u.match(/AppleWebKit.*Mobile.*/) || !!u.match(/AppleWebKit/), //是否为移动终端
ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端
android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android终端或者uc浏览器
iPhone: u.indexOf('iPhone') > -1 || u.indexOf('Mac') > -1, //是否为iPhone或者QQHD浏览器
iPad: u.indexOf('iPad') > -1, //是否iPad
webApp: u.indexOf('Safari') == -1 //是否web应该程序,没有头部与底部
};
}(),
language: (navigator.browserLanguage || navigator.language).toLowerCase()
}
 
if (browser.versions.ios || browser.versions.iPhone || browser.versions.iPad) {
	window.location="https://itunes.apple.com/";
}
else if (browser.versions.android) {
	window.location="http://app.qq.com";
}else {
	window.location="http://sj.qq.com/myapp/detail.html";
}
 
// document.writeln("语言版本: " + browser.language);
// document.writeln(" 是否为移动终端: " + browser.versions.mobile);
// document.writeln(" ios终端: " + browser.versions.ios);
// document.writeln(" android终端: " + browser.versions.android);
// document.writeln(" 是否为iPhone: " + browser.versions.iPhone);
// document.writeln(" 是否iPad: " + browser.versions.iPad);
// document.writeln(navigator.userAgent);
 
</script>

PC端跳转

<!DOCTYPE html>
<html>
<head lang="en">
    <meta charset="UTF-8">
    <title> </title>
    <script>
        window.location.href='http://www.wiredtiger.org';
    </script>
</head>
<body>
</body>
</html>

Java常用命令及jvm调优

假设你是一个普通的 Java 对象,你出生在 Eden 区,在 Eden 区有许多和你差不多的小兄弟、小姐妹,可以把 Eden 区当成幼儿园,在这个幼儿园里大家玩了很长时间。Eden 区不能无休止地放你们在里面,所以当年纪稍大,你就要被送到学校去上学,这里假设从小学到高中都称为 Survivor 区。开始的时候你在 Survivor 区里面划分出来的的“From”区,读到高年级了,就进了 Survivor 区的“To”区,中间由于学习成绩不稳定,还经常来回折腾。直到你 18 岁的时候,高中毕业了,该去社会上闯闯了。于是你就去了年老代,年老代里面人也很多。在年老代里,你生活了 20 年 (每次 GC 加一岁),最后寿终正寝,被 GC 回收。有一点没有提,你在年老代遇到了一个同学,他的名字叫爱德华 (慕光之城里的帅哥吸血鬼),他以及他的家族永远不会死,那么他们就生活在永生代。

java进程运行过程中创建的对象存放在堆中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor。
堆的内存模型大致为:

default

默认的,新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2 ( 该值可以通过参数 –XX:NewRatio 来指定 ),即:新生代 ( Young ) = 1/3 的堆空间大小。
老年代 ( Old ) = 2/3 的堆空间大小。其中,新生代 ( Young ) 被细分为 Eden 和 两个 Survivor 区域,这两个 Survivor 区域分别被命名为 from 和 to,以示区分。
默认的,Edem : from : to = 8 : 1 : 1 ( 可以通过参数 –XX:SurvivorRatio 来设定 ),即: Eden = 8/10 的新生代空间大小,from = to = 1/10 的新生代空间大小。
JVM 每次只会使用 Eden 和其中的一块 Survivor 区域来为对象服务,所以无论什么时候,总是有一块 Survivor 区域是空闲着的。
因此,新生代实际可用的内存空间为 9/10 ( 即90% )的新生代空间。

当对象在 Eden ( 包括一个 Survivor 区域,这里假设是 from 区域 ) 出生后,在经过一次 Minor GC 后,如果对象还存活,并且能够被另外一块 Survivor 区域所容纳, 当对象的年龄达到某个值时 ( 默认是 15 岁,可以通过参数 -XX:MaxTenuringThreshold 来设定 ),这些对象就会成为老年代。 也有例外,比如大对象直接送到老年代。

jvm优化步骤:
查看gc状况

jstat -gcutil pid 1s  

查看堆内存使用状况

jmap -heap pid

导出整个JVM 中内存信息

jmap -dump:live,format=b,file=d:\dump\heap.hprof <pid>

jvm优化

举个栗子:

JAVA_OPTS='-Xms1024M -Xmx1024M -XX:+UseParallelGC' 

-Xms<size>        set initial Java heap size
 设置JVM初始化堆内存大小,此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。 
-Xmx<size>        set maximum Java heap size
 设置JVM最大的堆内存大小

1.JVM运行时堆的大小

  -Xms堆的最小值

  -Xmx堆空间的最大值

       -Xmn年轻代大小 Sun官方推荐配置为整个堆的3/8
    (默认等效:-XX:NewSize==-XX:MaxNewSize==1024m)

2.新生代堆空间大小调整

  -XX:NewSize新生代的最小值

  -XX:MaxNewSize新生代的最大值

  -XX:NewRatio设置新生代与老年代在堆空间的大小

  -XX:SurvivorRatio新生代中Eden所占区域的大小

3.永久代大小调整

  -XX:MaxPermSize

4.其他

   -XX:MaxTenuringThreshold,设置将新生代对象转到老年代时需要经过多少次垃圾回收

例如:
java -Xms10000m -Xmx10000m -Xmn500m -XX:PermSize=500m -XX:MaxPermSize=500m -XX:SurvivorRatio=65536 -XX:MaxTenuringThreshold=0 -XX:+DisableExplicitGC -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:-CMSParallelRemarkEnabled -XX:CMSInitiatingOccupancyFraction=90 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+PrintClassHistogram -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+PrintHeapAtGC -XX:+PrintGCDateStamps -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=5005 -Xloggc:logs/gc.log -jar -Dserver.port=8801 -Dsun.reflect.inflationThreshold=2147483647 file.war

jps 输出JVM中运行的进程状态信息

jps -m 输出传入main方法的参数
    -l 输出main类或jar的全名
    -v 输出传入JVM的参数

jinfo命令用来输出给定 java 进程的所有配置信息

jmap主要用于打印指定Java进程(或核心文件、远程调试服务器)的共享对象内存映射或堆内存细节
jmap -heap pid

jstack 用来观察 jvm 中当前所有线程的运行情况和线程当前状态。
jstack -l pid

jstat jvm统计监测工具

250ms采样数4
jstat -gc pid 250 4 
jstat -gccause pid 2000 //每格2秒输出结果 

设置启动参数

JAVA_OPTS='-Xms1024M -Xmx1024M -XX:+UseParallelGC' 
-Xms<size>        set initial Java heap size
 设置JVM初始化堆内存大小,此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。 
-Xmx<size>        set maximum Java heap size
 设置JVM最大的堆内存大小

-XX:+UseParallelGC:选择垃圾收集器为并行收集器。此配置仅对年轻代有效。即上述配置下,年轻代使用并发收集,而年老代仍旧使用串行收集。

notes:
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope
http://nolinux.blog.51cto.com/4824967/1588716

Ffmpeg常用命令

获取流信息

ffprobe -v quiet -print_format json -show_streams streamUrl_name

推流

ffmpeg -re -i {your_video_file} -r 30 -s 1280x720 -f flv {your_rtmp_address}

-s 368x208(输出的分辨率为368x208,注意片源一定要是16:9的不然会变形)
-r 29.97(帧数,一般就用这个吧)
-re 代表按照帧率发送
-vcodec copy/libx264 要加,否则ffmpeg会重新编码输入的H.264裸流
-title "Test"(在PSP中显示的影片的标题)
-f 设置输出格式
-vcodec 设定视频编解码器,未设定时则使用与输入流相同的编解码器
-acodec 设定声音编解码器,未设定时则使用与输入流相同的编解码器
-vn 不处理视频
-an 不处理音频
-filter:v "crop=1440:1440:0:0" 过滤video切割大小及位置

YII框架环境部署注意点

nginx 安装

wget http://nginx.org/keys/nginx_signing.key
apt-key add nginx_signing.key
#For Ubuntu 14.04 replace codename to trusty
deb http://nginx.org/packages/ubuntu/ trusty nginx
deb-src http://nginx.org/packages/ubuntu/ trusty nginx
apt-get update
apt-get install nginx

php 安装

PHP 5.6 on Ubuntu 14
add-apt-repository ppa:ondrej/php
apt-get -y update
apt-get -y install php5-fpm php5.6 php5.6-mcrypt php5.6-mbstring php5.6-curl php5.6-cli php5.6-mysql php5.6-gd php5.6-intl php5.6-xsl

YII配置增加

location / {
try_files $uri $uri/ /index.php?$args;
client_max_body_size 20m;
client_body_buffer_size 128k;
}

加载mcrypt模块

php5enmod mcrypt

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.