目录javascript
http://www.cnblogs.com/andy-zhou/p/5327288.htmlphp
java -Xmx3550m -Xms3550m -Xmn2g –Xss128k # -Xmx8g:JVM最大可用堆内存 # -Xms8g:JVM初始化堆内存,通常设置Xms=Xmx # -Xmn2g:设置年轻代大小为2G。整个堆大小=年轻代大小 + 年老代大小 + 持久代大小。持久代通常固定大小为64m,因此增大年轻代后,将会减少年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。 # -Xss128k:设置每一个线程的堆栈大小 JAVA_OPTS="-XX:+UnlockCommercialFeatures -XX:+FlightRecorder -Dcom.sun.management.jmxremote.port=18999 -Dcom.sun.management.jmxremote=true -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=10.31.3.245" # 注:tomcat应当使用CATALINA_OPTS进行配置 # 其中这一段-XX:+UnlockCommercialFeatures -XX:+FlightRecorder商业上须要收费的 # jmc的飞行记录器须要开启这个
历史插件下载地址:
https://jmeter-plugins.org/downloads/old/css
命令相关:html
### 基本命令格式: jmeter -n -t <test JMX file> -l <test log file> -e -o <Path to output folder> # 样例: jmeter -n -t F:\PerformanceTest\TestCase\script\getToken.jmx -l testLogFile -e -o ./output # 基本命令格式: jmeter -g <log file> -o <Path to output folder> # 样例: jmeter -g D:\apache-jmeter-3.0\bin\testLogFile -o ./output ### 一些脚本编写技巧 # 使用正则表达式提取参数: 引用名称:对应保存的变量名 正则表达式:略 模板:正则表达式中的group,$2$对应组2,依次类推 匹配数字:通常都是0,不知道干吗的 缺省值:匹配不到的时候的默认值 # 使用BeanShell PostProcessor保存全局变量: # 将某一线程组内的变量经过__setProperty函数设置成Jmeter的全局变量 # 在另外一线程组中经过__P(parameters,)}函数调用便可 # 这写方法能够直接在BeanShell中使用,虽然长得不像Java代码,可是Jmeter能够识别 ${__setProperty(${uid}_token,${token},)}; ${__P(${uid}_token,)} # 操做变量 # 线程之间不共享 # 经过使用Bean shell内置对象vars能够对变量进行存取操做 # 参数支持Jmeter的${xxx}变量 vars.put("key", "value"); vars.get("key"); # 操做属性 # 经过使用Bean shell内置对象props 能够对属性进行存取操做 # 默认属性定义在jmeter.properties中 props.get("START.HMS"); props.put("PROP1","1234"); # Bean Shell中一样支持函数的编写,写法和Java中同样,该怎么导包还怎么导包
table td{ max-width: 500px; word-wrap: break-word; text-overflow: ellipsis; white-space: nowrap; overflow: hidden; } table td:hover{ white-space: normal; overflow: auto; }
// VUE中解决setInterval函数中的this不是指向VUE对象的问题 methods: { A() { let that = this setInterval(function(){ that.B() }, 1000) }, B() { console.info('run~') } }
# ifconfig命令 # 先查一下,属于哪一个包 $ yum search ifconfig Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.cqu.edu.cn * extras: mirrors.cqu.edu.cn * updates: mirror.lzu.edu.cn ============================================================================================= Matched: ifconfig ============================================================================================= net-tools.x86_64 : Basic networking tools # 而后安装这个包便可 $ yum install net-tools.x86_64 # ssh服务,通常来讲已经配好了 # 查看一下是否已安装相关软件包 $ rpm -qa | grep ssh openssh-clients-7.4p1-16.el7.x86_64 libssh2-1.4.3-10.el7_2.1.x86_64 openssh-7.4p1-16.el7.x86_64 openssh-server-7.4p1-16.el7.x86_64 # 若是没有,则须要安装 $ yum install openssh-server # 查看ssh服务状态,开启ssh服务略 $ service sshd status Redirecting to /bin/systemctl status sshd.service ● sshd.service - OpenSSH server daemon Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2018-12-15 06:18:20 EST; 7h left Docs: man:sshd(8) man:sshd_config(5) Main PID: 1038 (sshd) CGroup: /system.slice/sshd.service └─1038 /usr/sbin/sshd -D Dec 15 06:18:20 localhost.localdomain systemd[1]: Starting OpenSSH server daemon... Dec 15 06:18:20 localhost.localdomain sshd[1038]: Server listening on 0.0.0.0 port 22. Dec 15 06:18:20 localhost.localdomain sshd[1038]: Server listening on :: port 22. Dec 15 06:18:20 localhost.localdomain systemd[1]: Started OpenSSH server daemon. Dec 15 06:26:59 localhost.localdomain sshd[1518]: Accepted password for root from 192.168.126.1 port 9639 ssh2 Dec 15 06:26:59 localhost.localdomain sshd[1522]: Accepted password for root from 192.168.126.1 port 9641 ssh2 # 查看ssh的端口是否打开 $ netstat -ntpl | grep 22 tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 17816/sshd tcp6 0 0 :::22 :::* LISTEN 17816/sshd # sar、iostat $ yum search sysstat Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.cqu.edu.cn * extras: mirrors.cqu.edu.cn * updates: mirror.lzu.edu.cn =========================================================================================== N/S matched: sysstat ============================================================================================ sysstat.x86_64 : Collection of performance monitoring tools for Linux Name and summary matches only, use "search all" for everything. $ yun install sysstat.x86_64 # 配置Java环境(下面有) # 配置vim
TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no BOOTPROTO=dhcp DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33 UUID=04eb5440-c486-44e7-96e7-0b174960812f DEVICE=ens33 ONBOOT=yes
编辑/etc/profile,最下方添加vue
JAVA_HOME=/opt/jdk1.8.0_181 CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar PATH=$JAVA_HOME/bin:$HOME/bin:$HOME/.local/bin:$PATH
这个里面也加一份/etc/bashrcjava
Date date = new Date(); Calendar calendar = Calendar.getInstance(); calendar.setTime(date); calendar.add(Calendar.DATE, -1); date = calendar.getTime();
参见:超级强大的vim配置(vimplus)
Centos直接执行下面的就能够了node
git clone https://github.com/chxuan/vimplus.git ~/.vimplus cd ~/.vimplus ./install.sh
printf("Hello,my name is %s,i am %d years old\n", name, age);
print("Hello,my name is %s,i am %d years old\n" % (name, age));
应该导入到受信任的证书颁发机构中,导入以后若是没效果的话须要重启一下(反正Chrome须要重启,Firefox貌似不用)>>>
python
mvn dependency:copy-dependencies
# 查询当前的app adb shell dumpsys window | findstr mCurrentFocus
# git删除master分支,很危险 git branch -D master # 把当前分支设置为matser分支 git checkout -b master
sar -n DEV 1 3 du -sh * df -lh fdisk -l top -Hp pid # 解决远程挂载不上的问题 yum install nfs-utils # yum查看安装的软件,卸载软件 yum list installed | grep docker yum -y remove docker-engine.x86_64 # nmon经常使用 ps -ef | grep nmon | awk '{print $2}'| xargs kill -9 ./nmon -f -t -s 30 -c 900000 # 格式化/挂载磁盘 mkfs.ext3 /dev/xvde mkdir -p /opt/huawei mount /dev/xvde /opt/huawei vi /etc/fstab /dev/xvde /opt/huawei ext3 defaults 0 0
在这里插入代码片
# 时间相减得小很多天期 =TEXT((VALUE(O20)-VALUE(L20))*24,"0.0") # 时间戳转换为时间 =TEXT((C4/1000+8*3600)/86400+70*365+19,"yyyy-mm-dd hh:mm:ss") # v-lookup
yum -y install gcc # centos7安装php7 [详见](https://www.jb51.net/article/109228.htm) [或](https://blog.csdn.net/anzhen0429/article/details/79272893) # yum安装,安装以后少php-fpm、php-config,须要按照下面的流程处理 # 安装epel-release rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm # 安装PHP7的rpm源 rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm # 安装php7 yum install php70w.x86_64 php70w-cli.x86_64 php70w-common.x86_64 php70w-gd.x86_64 php70w-ldap.x86_64 php70w-mbstring.x86_64 php70w-mcrypt.x86_64 php70w-mysql.x86_64 php70w-pdo.x86_64 # 安装php-fpm yum install php70w-fpm php70w-opcache # 启动 systemctl start php-fpm # 开机启动设置 systemctl enable php-fpm systemctl daemon-reload # nginx配置 server { listen 80; #server_name www.test.com; #须要修改客户端hosts文件 root /opt/wordpress; #PHP项目根路径 index index.php index.html index.htm; location / { try_files $uri $uri/ =404; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } location ~ \.php$ { try_files $uri =404; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } } # 附上官网安装说明 http://php.net/manual/zh/install.unix.nginx.php # php-fpm重启 kill -USR2 pid # service restart php-fpm也行 # 下载源码 git clone https://github.com/longxinH/xhprof.git ./xhprof # 编译源码并安装 cd xhprof/extension/ /path/to/php7/bin/phpize ./configure --with-php-config=/path/to/php7/bin/php-config make && sudo make install # 在php.ini中添加 [xhprof] extension = xhprof.so xhprof.output_dir = /tmp/xhprof # 安装绘图工具 yum install graphviz # 在PHP代码入口处添 xhprof_enable(); # 在PHP代码出口处添加 # 中止监控 $xhprof_data = xhprof_disable(); # 导入工具包,需注意工具包的位置 include_once "/xhprof_lib/utils/xhprof_lib.php"; include_once "/xhprof_lib/utils/xhprof_runs.php"; # 保存结果到xhprof.output_dir设置的目录 $xhprof_runs = new XHProfRuns_Default(); # save the run under a namespace "xhprof_foo" $run_id = $xhprof_runs->save_run($xhprof_data, "xhprof_foo"); # 能够将这个打印到日志中,或者直接返回出来,也能够直接到xhprof.output_dir目录下看 echo "---------------http://....../xhprof_html/index.php?run=$run_id&source=xhprof_foo\n".---------------\n"; # 注意:需将xhprof目录下的examples、xhprof_html、xhprof_lib放到合适位置 # examples:是一个示例PHP文件 # xhprof_html:用来展现收集到的性能结果 # xhprof_lib:用来整理性能数据的库 # 启动、重启php-fpm,php-fpm -R是以root用户启动,默认不支持
// 解决exec执行复杂命令,管道符失效的问题 // linux下: String[] command = { "/bin/sh", "-c", cmds }; Process ps = Runtime.getRuntime().exec(command ); // windows下: String[] command = { "cmd", "/c", cmds }; Process ps = Runtime.getRuntime().exec(command ); // 函数中有死循环,能够不要返回值,如: public int test() { while (true) {} } // SpringBoot中获取resources目录中的东西 Resource resource = new ClassPathResource("resource目录下的文件路径"); File file = resource.getFile(); // 如: Resource resource = new ClassPathResource("scripts/test.jmx"); File file = resource.getFile(); // SpringBoot获取项目根目录 ClassUtils.getDefaultClassLoader().getResource("").getPath();
# 打包跳过测试 mvn clean install -DskipTests # 或 mvn clean install -Dmaven.test.skip=true
# 复制zookeeper的zoo_sample.cfg配置为zoo.cfg # 根据须要进行配置 # 配置kafka的server.properties # 根据须要进行log地址及线程配置 # 如下行放开注释并配置地址 listeners=PLAINTEXT://本机ip:9092 # 设置为false,不让程序自动建立topic,就是程序再往kafka生产数据的时候,若是发现topic不存在就会自动建立。**加粗样式** auto.create.topics.enable=false # 设置为true,删除topic的同时,会过一段时间删除目录和对应数据文件目录。 delete.topic.enable=true # 配置公网访问(关闭listeners的配置,使用下面这个) advertised.listeners=PLAINTEXT://49.234.13.92:9092 # windows zookeepe启动 .\bin\zkServer.cmd # windows kafka启动 .\bin\windows\kafka-server-start.bat .\config\server.properties # linux差很少,执行对应sh文件 Kafka的集群管理工具AdminClient 建立Topic:createTopics(Collection<NewTopic> newTopics) 删除Topic:deleteTopics(Collection<String> topics) 显示全部Topic:listTopics() 查询Topic:describeTopics(Collection<String> topicNames) 查询集群信息:describeCluster() 查询ACL信息:describeAcls(AclBindingFilter filter) 建立ACL信息:createAcls(Collection<AclBinding> acls) 删除ACL信息:deleteAcls(Collection<AclBindingFilter> filters) 查询配置信息:describeConfigs(Collection<ConfigResource> resources) 修改配置信息:alterConfigs(Map<ConfigResource, Config> configs) 修改副本的日志目录:alterReplicaLogDirs(Map<TopicPartitionReplica, String> replicaAssignment) 查询节点的日志目录信息:describeLogDirs(Collection<Integer> brokers) 查询副本的日志目录信息:describeReplicaLogDirs(Collection<TopicPartitionReplica> replicas) 增长分区:createPartitions(Map<String, NewPartitions> newPartitions)
# 查看端口占用进程 lsof -i:端口号 netstat -tunlp|grep 端口号 # sed sed -i "s#localhost:8080#172.18.84.135:18080#g" file(s) # 查看一个进程启动的详细时间 ps -p 613742 -o lstart ##### https://blog.csdn.net/drievn/article/details/53179180 ##### # 查看CPU各个核心的资源占用状况,每秒 mpstat -P ALL 1 10 # 查看进程绑定的CPU信息统计,多进程应用会存在CPU绑定不均匀致使CPU使用不均匀的问题 pidstat | grep php-fpm | awk '{print $(NF-1)}' | sort | uniq -c # 绑定进程的脚本 #!/bin/bash CPUs=$(grep -c "processor" /proc/cpuinfo) PIDs=$(ps -aux|grep "php-fpm[:] pool"|awk 'print $2}') let i=0 for PID in $PIDs;do CPU=$(echo "$i%$CPUs"|bc) let i++ taskset -pc $CPU $PID done ##### http://blog.chinaunix.net/uid-23284114-id-3549663.html ##### # 参数 -d 表示,显示设备(磁盘)使用状态;-k某些使用block为单位的列强制使用Kilobytes为单位;1 10表示,数据显示每隔1秒刷新一次,共显示10次。 iostat -d -k 1 10 Device: tps kB_read/s kB_wrtn/s kB_read kB_wrtn sda 39.29 21.14 1.44 441339807 29990031 sda1 0.00 0.00 0.00 1623 523 # tps:该设备每秒的传输次数,“一次传输”意思是“一次I/O请求”。多个逻辑请求可能会被合并为“一次I/O请求”。“一次传输”请求的大小是未知的。 # kB_read/s:每秒从设备(drive expressed)读取的数据量。 # kB_wrtn/s:每秒向设备(drive expressed)写入的数据量。 # kB_read:读取的总数据量;kB_wrtn:写入的总数量数据量;这些单位都为Kilobytes iostat -x 1 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util vda 0.00 0.36 0.03 0.61 0.48 21.03 67.94 0.01 12.80 3.64 13.22 0.49 0.03 vdb 0.00 0.00 0.00 0.00 0.00 0.00 24.06 0.00 5.53 5.68 0.42 1.64 0.00 Device: rrqm/s wrqm/s r/s w/s rkB/s wkB/s avgrq-sz avgqu-sz await r_await w_await svctm %util vda 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 vdb 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 # -x参数能够显示更多统计信息 # rrqm/s:每秒这个设备相关的读取请求有多少被Merge了(当系统调用须要读取数据的时候,VFS将请求发到各个FS,若是FS发现不一样的读 取请求读取的是相同Block的数据,FS会将这个请求合并Merge);wrqm/s:每秒这个设备相关的写入请求有多少被Merge了。 # (个人iostat版本没这个显示)rsec/s:每秒读取的扇区数;wsec/:每秒写入的扇区数。 # r/s:The number of read requests that were issued to the device per second;w/s:The number of write requests that were issued to the device per second; # await:每个IO请求的处理的平均时间(单位是微秒毫秒)。这里能够理解为IO的响应时间,通常地系统IO响应时间应该低于5ms,若是大于10ms就比较大了。 # %util:在统计时间内全部处理IO时间,除以总共统计时间。例如,若是统计间隔1秒,该设备有0.8秒在处理IO,而0.2秒闲置,那么该设备 的%util = 0.8/1 = 80%,因此该参数暗示了设备的繁忙程度。通常地,若是该参数是100%表示设备已经接近满负荷运行了(固然若是是多磁盘,即便%util是100%,因 为磁盘的并发能力,因此磁盘使用未必就到了瓶颈)。 # 常见用法 # 查看TPS和吞吐量信息 iostat -d -k 1 10 # 查看设备使用率(%util)、响应时间(await) iostat -d -x -k 1 10 # 查看cpu状态 iostat -c 1 10 ##### sar经常使用命令:https://www.cnblogs.com/howhy/p/6396437.html ##### # 统计CPU使用状况 sar -u 1 3 04:52:55 PM CPU %user %nice %system %iowait %steal %idle 04:52:56 PM all 0.13 0.00 0.13 0.00 0.00 99.75 04:52:57 PM all 0.13 0.00 0.13 0.00 0.00 99.75 04:52:58 PM all 0.50 0.00 0.25 0.12 0.00 99.12 Average: all 0.25 0.00 0.17 0.04 0.00 99.54 # %user #用户空间的CPU使用 # %nice 改变过优先级的进程的CPU使用率 # %system 内核空间的CPU使用率 # %iowait CPU等待IO的百分比 # %steal 虚拟机的虚拟机CPU使用的CPU # %idle 空闲的CPU # 在以上的显示当中,主要看%iowait和%idle,%iowait太高表示存在I/O瓶颈,即磁盘IO没法知足业务需求,若是%idle太低表示CPU使用率比较严重,须要结合内存使用等状况判断CPU是否瓶颈。 # 显单个CPU的使用状况 sar -P 0 1 3 06:42:13 PM CPU %user %nice %system %iowait %steal %idle 06:42:14 PM 0 53.00 0.00 6.00 0.00 0.00 41.00 06:42:15 PM 0 57.58 0.00 4.04 0.00 0.00 38.38 06:42:16 PM 0 52.58 0.00 6.19 0.00 0.00 41.24 Average: 0 54.39 0.00 5.41 0.00 0.00 40.20 # CPU 第几个CPU # %user 用户态的CPU使用统计 # %nice 更改过优先级的进程的CPU使用统计 # %iowait CPU等待IO数据的百分比 # %steal 虚拟机的vCPU占用的物理CPU的百分比 # %idle 空闲的CPU百分比 # 查看平均负载 sar -q 1 3 06:44:25 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 06:44:26 PM 2 842 0.37 0.63 0.78 06:44:27 PM 4 842 0.37 0.63 0.78 06:44:28 PM 3 842 0.37 0.63 0.78 Average: 3 842 0.37 0.63 0.78 # runq-sz 运行队列的长度(等待运行的进程数,每核的CP不能超过3个) # plist-sz 进程列表中的进程(processes)和线程数(threads)的数量 # ldavg-1 最后1分钟的CPU平均负载,即将多核CPU过去一分钟的负载相加再除以核心数得出的平均值,5分钟和15分钟以此类推 # ldavg-5 最后5分钟的CPU平均负载 # ldavg-15 最后15分钟的CPU平均负载 # 查看内存使用状况 sar -r 1 3 06:45:20 PM kbmemfree kbmemused %memused kbbuffers kbcached kbcommit %commit 06:45:21 PM 738416 15595048 95.48 8324 171104 22171856 108.53 06:45:22 PM 738292 15595172 95.48 8332 171296 22171856 108.53 06:45:23 PM 737796 15595668 95.48 8332 171488 22171856 108.53 Average: 738168 15595296 95.48 8329 171296 22171856 108.53 # kbmemfree 空闲的物理内存大小 # kbmemused 使用中的物理内存大小 # %memused 物理内存使用率 # kbbuffers 内核中做为缓冲区使用的物理内存大小,kbbuffers和kbcached:这两个值就是free命令中的buffer和cache. # kbcached 缓存的文件大小 # kbcommit 保证当前系统正常运行所须要的最小内存,即为了确保内存不溢出而须要的最少内存(物理内存+Swap分区) # commit 这个值是kbcommit与内存总量(物理内存+swap分区)的一个百分比的值 # 查看系统swap分区的统计信息 sar -W 1 3 06:46:15 PM pswpin/s pswpout/s 06:46:16 PM 0.00 0.00 06:46:17 PM 0.00 0.00 06:46:18 PM 0.00 0.00 Average: 0.00 0.00 # pswpin/s 每秒从交换分区到系统的交换页面(swap page)数量 # pswpott/s 每秒从系统交换到swap的交换页面(swap page)的数量 # 查看I/O和传递速率的统计信息 sar -b 1 3 06:47:29 PM tps rtps wtps bread/s bwrtn/s 06:47:30 PM 4.08 0.00 4.08 0.00 32.65 06:47:31 PM 0.00 0.00 0.00 0.00 0.00 06:47:32 PM 0.00 0.00 0.00 0.00 0.00 Average: 1.35 0.00 1.35 0.00 10.77 # tps 磁盘每秒钟的IO总数,等于iostat中的tps # rtps 每秒钟从磁盘读取的IO总数 # wtps 每秒钟从写入到磁盘的IO总数 # bread/s 每秒钟从磁盘读取的块总 # bwrtn/s 每秒钟此写入到磁盘的块总数 # 磁盘使用详情统计 sar -d -p 1 3 06:48:57 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 06:48:58 PM dev252-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 06:48:58 PM dev252-16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 06:48:58 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 06:48:59 PM dev252-0 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 06:48:59 PM dev252-16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 06:48:59 PM DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util 06:49:00 PM dev252-0 4.04 0.00 32.32 8.00 0.00 1.00 0.25 0.10 06:49:00 PM dev252-16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 Average: DEV tps rd_sec/s wr_sec/s avgrq-sz avgqu-sz await svctm %util Average: dev252-0 1.34 0.00 10.74 8.00 0.00 1.00 0.25 0.03 Average: dev252-16 0.00 0.00 0.00 0.00 0.00 0.00 0.00 0.00 # DEV 磁盘设备的名称,若是不加-p,会显示dev253-0相似的设备名称,所以加上-p显示的名称更直接 # tps:每秒I/O的传输总数 # rd_sec/s 每秒读取的扇区的总数 # wr_sec/s 每秒写入的扇区的 总数 # avgrq-sz 平均每次次磁盘I/O操做的数据大小(扇区) # avgqu-sz 磁盘请求队列的平均长度 # await 从请求磁盘操做到系统完成处理,每次请求的平均消耗时间,包括请求队列等待时间,单位是毫秒(1秒等于1000毫秒),等于寻道时间+队列时间+服务时间 # svctm I/O的服务处理时间,即不包括请求队列中的时间 # %util I/O请求占用的CPU百分比,值越高,说明I/O越慢 # 进程、inode、文件和锁表状态 sar -v 1 3 06:50:52 PM dentunusd file-nr inode-nr pty-nr 06:50:53 PM 3885 3936 10854 6 06:50:54 PM 3885 3904 10854 6 06:50:55 PM 3885 3936 10854 6 Average: 3885 3925 10854 6 # dentunusd 在缓冲目录条目中没有使用的条目数量 # file-nr 被系统使用的文件句柄数量 # inode-nr 已经使用的索引数量 # pty-nr 使用的pty数量 # 统计网络信息 sar -n [DEV,EDEV,NFS,NFSD,SOCK,IP,EIP,ICMP,EICMP,TCP,ETCP,UDP,SOCK6,IP6,EIP6,ICMP6,EICMP6,UDP6] 1 3 # DEV显示网络接口信息,EDEV显示关于网络错误的统计数据 # NFS统计活动的NFS客户端的信息,NFSD统计NFS服务器的信息,SOCK显示套接字信息,ALL显示全部5个开关 # 它们能够单独或者一块儿使用
在TCP层,有个FLAGS字段,这个字段有如下几个标识:SYN, FIN, ACK, PSH, RST, URG. 其中,对于咱们平常的分析有用的就是前面的五个字段。 它们的含义是: SYN表示创建链接, FIN表示关闭链接, ACK表示响应, PSH表示有 DATA数据传输, RST表示链接重置。 其中,ACK是可能与SYN,FIN等同时使用的,好比SYN和ACK可能同时为1,它表示的就是创建链接以后的响应, 若是只是单个的一个SYN,它表示的只是创建链接。 TCP的几回握手就是经过这样的ACK表现出来的。 但SYN与FIN是不会同时为1的,由于前者表示的是创建链接,然后者表示的是断开链接。 RST通常是在FIN以后才会出现为1的状况,表示的是链接重置。 通常地,当出现FIN包或RST包时,咱们便认为客户端与服务器端断开了链接;而当出现SYN和SYN+ACK包时,咱们认为客户端与服务器创建了一个链接。 PSH为1的状况,通常只出如今 DATA内容不为0的包中,也就是说PSH为1表示的是有真正的TCP数据包内容被传递。 TCP的链接创建和链接关闭,都是经过请求-响应的模式完成的。 概念补充-TCP三次握手: TCP(Transmission Control Protocol)传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的链接服务,采用三次握手确认创建一个链接: 位码即tcp标志位,有6种标示:SYN(synchronous创建联机) ACK(acknowledgement 确认) PSH(push传送) FIN(finish结束) RST(reset重置) URG(urgent紧急)Sequence number(顺序号码) Acknowledge number(确认号码) 第一次握手:主机A发送位码为syn=1,随机产生seq number=1234567的数据包到服务器,主机B由SYN=1知道,A要求创建联机; 第二次握手:主机B收到请求后要确认联机信息,向A发送ack number=(主机A的seq+1),syn=1,ack=1,随机产生seq=7654321的包; 第三次握手:主机A收到后检查ack number是否正确,即第一次发送的seq number+1,以及位码ack是否为1,若正确,主机A会再发送ack number=(主机B的seq+1),ack=1,主机B收到后确认seq值与ack=1则链接创建成功。 完成三次握手,主机A与主机B开始传送数据。 在TCP/IP协议中,TCP协议提供可靠的链接服务,采用三次握手创建一个链接。 第一次握手:创建链接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认; 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时本身也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态; 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。完成三次握手,客户端与服务器开始传送数据.
Java语言定义的线程状态分析mysql
转自
前言:这两个异常报出的时候,说明客户端无法正常链接到服务端,可是二者仍是有区别的。
1:Connection timed out
当获得 Connection timed out: connect 的时候表示TCP路由不正常,缘由有不少,多是服务器没法ping通,多是服务器(防火墙等)丢弃了该请求报文包,也多是服务器应答太慢,又或者存在间歇性的问题(这种状况很难从日志文件中排查问题)。
2:Connection refused
当获得Connection refused: connect 异常的时候表示从本地客户端到目标IP地址的路由是正常的,可是该目标端口没有进程在监听,而后服务端拒绝掉了链接。
一个成功的tcp连接将会看到Syn,Syn-Ack,Ack,这也就是咱们预期的TCP三次握手。当使用tcpdump或wireshark抓包工具来探测发送过来的请求报文包时,Connection refused将会看到Syn,Rst。linux
Lambda 表达式
简单示例:
() -> 5
x -> 2 * x
(x, y) -> x – y
(int x, int y) -> x + y
(String s) -> System.out.print(s)
(int a, int b) -> { return a * b; }
方法引用:
方法引用经过方法的名字来指向一个方法
方法引用使用一对冒号::
构造器引用:它的语法是Class::new
静态方法引用:它的语法是Class::static_method
特定类的任意对象的方法引用:它的语法是Class::method
特定对象的方法引用:它的语法是instance::method
函数式接口:
package:java.util.function
默认方法:
默认方法就是接口能够有实现方法,并且不须要实现类去实现其方法
咱们只需在方法名前面加个 default 关键字便可实现默认方法
若是子类实现的多个接口中有同名的默认方法,在使用的时候子类能够复写该方法,或者在使用的以后指定具体的父类.super.方法,如:Vehicle.super.print();
Optional 类:
Optional 类是一个能够为null的容器对象。若是值存在则isPresent()方法会返回true,调用get()方法会返回该对象。
Optional 是个容器:它能够保存类型T的值,或者仅仅保存null。
Optional 提供不少有用的方法,这样咱们就不用显式进行空值检测。
Optional 类的引入很好的解决空指针异常。
Steam:
在Java 8中, 集合接口有两个方法来生成流:stream() − 为集合建立串行流;stream() − 为集合建立串行流。
流式操做:
OptionalInt java.util.stream.IntStream.reduce(IntBinaryOperator op)
reduce方法能够将流中的数据依次处理,最终计算出一个值,好比能够很方便的完成对一个数组的阶乘操做
void java.util.stream.IntStream.forEach(IntConsumer action)
forEach方法能够用来迭代流中的每一个数据
IntStream java.util.stream.IntStream.map(IntUnaryOperator mapper)
map方法能够对流中的每一个数据进行一次处理,好比对一个List每个数字求平方等
IntStream java.util.stream.IntStream.filter(IntPredicate predicate)
filter方法经过设置条件,过滤流中的元素
IntStream java.util.stream.IntStream.limit(long maxSize)
limit方法用于获取指定数量的流
IntStream java.util.stream.IntStream.sorted()
sorted方法用于对流进行排序
R java.util.stream.Stream.collect(Collector<? super T, A, R> collector)
R java.util.stream.Stream.collect(Supplier
没看明白啥意思。。
IntSummaryStatistics java.util.stream.IntStream.summaryStatistics()
summaryStatistics方法能够返回一个IntSummaryStatistics对象,此对象具备一些对数值类型的基本统计功能,如:getMax、getMax、getMax、getAverage等
服务端:
service ntpd start
$ vim /etc/ntp.conf //将这行给注释 #restrict default nomodify notrap nopeer noquery //而后添加这两行 ,意思是 容许IPV4 IPV6 查询 拒绝修改 restrict -4 default kod notrap nomodify restrict -6 default kod notrap nomodify //添加修改上层时间服务器,若是能联通外网,则不须要修改, server 0.rhel.pool.ntp.org iburst server 1.rhel.pool.ntp.org iburst server 2.rhel.pool.ntp.org iburst server 3.rhel.pool.ntp.org iburst //若是联不通外网,则把上面几行注释,而后添加下面两行,意思是设置成时间服务器是本身 server 127.127.1.0 fudge 127.127.1.0 stratum 8
客户端
service ntpd start
$ vim /etc/ntp.conf server 192.168.10.20 iburst
同步时间: ntpdate 192.168.10.20
// 建立一个Actor import akka.actor.AbstractActor; import akka.actor.Props; public class MyActor extends AbstractActor { // props方法用于ActorSystem对象的actorOf方法,建立ActorRef使用 static public Props props(MyMessage myMessage) { // actorClass标识类型 // creator是一个λ表达式,无传入参数,返回actorClass对象 return Props.create(MyActor.class, () -> new MyActor(myMessage)); } // 可使用封装的消息(用一个个对象将消息封装) @SuppressWarnings("unused") private MyMessage myMessage; public MyActor() {} // 带参数的构造函数 public MyActor(MyMessage myMessage) { this.myMessage = myMessage; } // 在这里面定义改Actor收到消息的处理方式 @Override public Receive createReceive() { return receiveBuilder() .match(String.class, apply -> System.out.println("收到了String类型的消息:" + apply)) .match(MyMessage.class, apply -> System.out.println("收到了MyMessage类型的消息:" + apply.message)) .build(); } } // 简单的封装消息 public class MyMessage { public String message; public MyMessage(String message) { this.message = message; } } // 程序入口&执行逻辑 import akka.actor.ActorRef; import akka.actor.ActorSystem; public class MyMain { public static void main(String[] args) { final ActorSystem system = ActorSystem.create("test_akka"); // 建立Actor并获取它的引用 ActorRef myActor_1 = system.actorOf(MyActor.props(new MyMessage("666")), "MyActor_1"); // 同一个Actor能够建立多个 ActorRef myActor_2 = system.actorOf(MyActor.props(new MyMessage("777")), "MyActor_2"); myActor_1.tell("Hello", ActorRef.noSender()); myActor_2.tell(new MyMessage("66666666666"), ActorRef.noSender()); } }
# 查看全部参数 SHOW VARIABLES; # 缓存相关参数查看,https://www.cnblogs.com/wangyiwei/p/7765457.html SHOW VARIABLES LIKE '%query_cache%'; # 查看慢查询相关日志 SHOW VARIABLES LIKE 'slow_query%'; SHOW VARIABLES LIKE 'long_query_time'; # 设置方法 # 1:全局变量设置 SET GLOBAL slow_query_log='ON'; SET GLOBAL slow_query_log_file='/usr/local/mysql/data/slow.log'; SET GLOBAL long_query_time=1; # 2:配置文件设置 # 修改配置文件my.cnf,在[mysqld]下的下方加入,而后重启mysql服务便可 [mysqld] slow_query_log = ON slow_query_log_file = /usr/local/mysql/data/slow.log long_query_time = 1 # 查询前100条 SELECT * FROM t_basic_message WHERE is_read = 1 LIMIT 0, 100; # 显示哪些线程正在运行 SHOW PROCESSLIST; # 显示前100条 SHOW FULL PROCESSLIST; # 显示全部 # kill 进程 kill 1825; # 显示哪些表的打开的 SHOW OPEN TABLES; # In_use列表示有多少线程正在使用某张表 # Name_locked表示表名是否被锁,这通常发生在Drop或Rename命令操做这张表时 # 查看服务器状态 SHOW STATUS LIKE '%lock%' # 查看innodb引擎的运行时信息 SHOW ENGINE INNODB STATUS # 查看服务器timeout配置 SHOW VARIABLES LIKE '%timeout%' # 查询正在执行的事务 SELECT * FROM information_schema.INNODB_TRX # 查看正在锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS # 查看等待锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS # 查看下autocommit的值 select @@autocommit; # 查看数据库的隔离级别: select @@tx_isolation; # 查看表是何时更新的 SELECT * FROM information_schema.tables WHERE table_schema='test1' AND table_name='rpt_test'; # 查看正在执行的sql # 方法一:使用processlist,可是有个弊端,就是只能查看正在执行的sql语句,对应历史记录,查看不到。好处是不用设置,不会保存。 use information_schema; show processlist; # 或者直接 select * from information_schema.`PROCESSLIST` where info is not null; # 方法二:开启日志模式 # 一、开启/关闭 SET GLOBAL log_output = 'TABLE'; SET GLOBAL general_log = 'ON'; # SET GLOBAL log_output = 'TABLE'; SET GLOBAL general_log = 'OFF'; # 二、查询 SELECT * from mysql.general_log ORDER BY event_time DESC # 三、清空表(delete对于这个表,不容许使用,只能用truncate) # truncate table mysql.general_log; # 密码复杂度 SHOW VARIABLES LIKE 'validate_password%'; # 密码验证等级 SET GLOBAL validate_password_policy=LOW; # 密码最小长度限制修改(最小是4) SET GLOBAL validate_password_length=6; # 容许远程链接 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION; FLUSH PRIVILEGES;
==TODO== orzdba redis-stat