發表文章

調效能神器 JDK Mission Control (JMC) JMX 連接設定 + 監控Docker下微服務的設定

圖片
  調效能神器 JDK Mission Control (JMC) JMX  連接設定 + 監控Docker下微服務的設定 先設定 JMX 在執行Java Application 增加以下參數 - Dcom . sun . management . jmxremote - Dcom . sun . management . jmxremote . port = 7091 - Dcom . sun . management . jmxremote . rmi . port = 7091 - Dcom . sun . management . jmxremote . authenticate = false - Dcom . sun . management . jmxremote . ssl = false - Djava . rmi . server . hostname = localhost ex java \ -Dcom.sun.management.jmxremote \ -Dcom.sun.management.jmxremote.port=7091 \ -Dcom.sun.management.jmxremote.rmi.port=7091 \ -Dcom.sun.management.jmxremote.authenticate=false \ -Dcom.sun.management.jmxremote.ssl=false \ -Djava.rmi.server.hostname=localhost \ -jar Notepad.jar Docker上執行請看以下設定 修改DockerFile ... EXPOSE 8080 7091 ENTRYPOINT [ "java" , "-Dspring.profiles.active=prod" , "-Dcom.sun.management.jmxremote" , "-Dcom.sun.management.jmxremote.port=7091" , "-Dcom.sun.management.jmxremote.rmi.port=7...

InfluxDB flux 自己寫移動累加function

  InfluxDB flux 自己寫移動累加function 例如:我要得知 6小時交易量 / 6小時累積雨量 等等 如何Query 不幸的 flux 內建只有移動平均 movingAverage() function timedMovingAverage() function 可以使用 那就自己寫一個 這時候就自己寫一個function 直接看語法: timedMovingSum = ( every , period , column = "_value" , tables = < - ) => tables | > window ( every : every , period : period ) | > sum ( column : column ) | > duplicate ( column : "_stop" , as : "_time" ) | > window ( every : inf ) usage from ( bucket : "quote" ) | > range ( start : v . timeRangeStart , stop : v . timeRangeStop ) | > filter ( fn : ( r ) => r . _measurement == "realtime" and r . symbol == "${symbolSel}" and r . _field == "${col}" ) | > difference ( ) | > difference ( ) | > timedMovingSum ( every : 5 m , period : 1 h ) | > movingAverage ( n : int ( v : strings . replaceAll ( v : ...

Python closure & late binding 陷阱

Python closure & late binding 陷阱 不囉嗦直接看code # Online Python compiler (interpreter) to run Python online. # Write Python 3 code in this online editor and run it. class TC : def __init__ ( self, condition_list: list = [ 'A' ] ): self.condition_list = condition_list def add ( self ): temp_tc = TC() self.condition_list.extend(temp_tc.condition_list) tc1 = TC() tc1.add() print(tc1.condition_list) tc2 = TC() tc2.add() print(tc2.condition_list) tc3 = TC() tc3.add() print(tc3.condition_list) 很直覺的答案應該是如下 [ 'A' , 'A' ] [ 'A' , 'A' ] [ 'A' , 'A' ] 但是結果卻是如下 [ 'A' , 'A' ] [ 'A' , 'A' , 'A' , 'A' ] [ 'A' , 'A' , 'A' , 'A' , 'A' , 'A' , 'A' , 'A' ] 結論 很明顯這有很嚴重的 memory leak 的 issue 主要是closure讓區域變數無法release, condition_list 看似已經從內存中消失了,但依然能夠訪問...

如何抓到峰值(支撐位) InfluxDB / Grafana

圖片
如何抓到峰值(支撐位) InfluxDB / Grafana 先畫出基本線圖 from ( bucket : "quote" ) | > range ( start : v . timeRangeStart , stop : v . timeRangeStop ) | > filter ( fn : ( r ) => r . _measurement == "daily" and r . valmean == "high" and r . symbol == "${symbolSel}" ) 找出低點支撐位 這時候就可以透過 min來找出一段區間的 最低位 from ( bucket : "quote" ) | > range ( start : v . timeRangeStart , stop : v . timeRangeStop ) | > filter ( fn : ( r ) => r . _measurement == "daily" and r . valmean == "high" and r . symbol == "${symbolSel}" ) | > window ( every : 15 d ) | > min ( ) 可以去調整  every: 15d  來去決定低點的區間 把這些低點變成曲線 目前序列都變成單獨的點 可以透過以下語法再把點變成序列 | > window ( every : inf ) 整合 完整flux from ( bucket : "quote" ) | > range ( start : v . timeRangeStart , stop : v . timeRangeStop ) | > filter ( fn : ( r )...