目錄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