gitweixin
  • 首页
  • 小程序代码
    • 资讯读书
    • 工具类
    • O2O
    • 地图定位
    • 社交
    • 行业软件
    • 电商类
    • 互联网类
    • 企业类
    • UI控件
  • 大数据开发
    • Hadoop
    • Spark
    • Hbase
    • Elasticsearch
    • Kafka
    • Flink
    • 数据仓库
    • 数据挖掘
    • flume
    • Kafka
    • Hive
    • shardingsphere
    • solr
  • 开发博客
    • Android
    • php
    • python
    • 运维
    • 技术架构
    • 数据库
  • 程序员网赚
  • bug清单
  • 量化投资
  • 在线查询工具
    • 去行号
    • 在线时间戳转换工具
    • 免费图片批量修改尺寸在线工具
    • SVG转JPG在线工具

月度归档1月 2021

精品微信小程序开发门户,代码全部亲测可用

  • 首页   /  2021   /  
  • 1月
Elasticsearch 1月 31,2021

ES的内存xms和xmx设置不一致导致启动失败

ES的内存xms和xmx设置不一致导致启动失败

问题背景与现象

ES启动失败:

1. 页面显示ES实例启动失败,查看详情是Xms和Xmx大小不一致;

ES的内存xms和xmx设置不一致导致启动失败

2. 查看ES后台日志,报错如下,初始化内存和最大内存不一致,导致启动失败

/var/log/Bigdata/elasticsearch/esnode1/elasticsearch_cluster.log

2018-12-11T17:21:49,670][INFO ][o.e.b.BootstrapChecks    ] [EsNode1] bound or publishing to a non-loopback address, enforcing bootstrap checks
[2018-12-11T17:21:49,673][ERROR][o.e.b.Bootstrap          ] [EsNode1] node validation exception
[1] bootstrap checks failed
[1]: initial heap size [536870912] not equal to maximum heap size [1073741824]; this can cause resize pauses and prevents mlockall from locking the entire heap
[2018-12-11T17:21:49,677][INFO ][o.e.n.Node               ] [EsNode1] stopping ...
[2018-12-11T17:21:49,708][INFO ][o.e.n.Node               ] [EsNode1] stopped
[2018-12-11T17:21:49,708][INFO ][o.e.n.Node               ] [EsNode1] closing ...
[2018-12-11T17:21:49,721][INFO ][o.e.n.Node               ] [EsNode1] closed

原因分析

如果JVM以不等的初始(Xms)和最大(Xmx)堆(heap)大小启动,则可能会在系统使用期间调整JVM堆的大小,因此可能会暂停。为了避免这些调整大小的停顿,需要使初始(Xms)堆(heap)大小等于最大Xms堆(heap)大小启动JVM。另外,启用了bootstrap.memory_lock,JVM将在启动时锁定堆(heap)的初始(Xms)大小。如果初始堆大小不等于最大堆大小,在重新调整大小之后,将不会将所有JVM堆锁定在内存中。

因此是ES的内核限制,要求ES的启动参数的初始(Xms)和最大(Xmx)内存相等。

作者 east
Elasticsearch 1月 31,2021

Elasticsearch(ES)运维常用命令

集群检查常用命令

1. 查询集群状态命令:

curl -XGET "http://ip:port/_cluster/health?pretty"

2. 查询Es全局状态:

curl -XGET "http://ip:port/_cluster/stats?pretty"

3. 查询集群设置

curl -XGET "http://ip:port/_cluster/settings?pretty"

4. 查看集群文档总数

curl -XGET "http://ip:port/_cat/count?v"

4. 查看集群文档总数

curl -XGET "http://ip:port/_cat/count?v"

5. 查看集群别名组

curl -XGET "http://ip:port/_cat/aliases"

6.查看当前集群索引分片信息

curl -XGET "http://ip:port/_cat/shards?v"   注:查看某一个索引可用shards/索引名?v

7.查看集群实例存储详细信息

curl -XGET "http://ip:port/_cat/allocation?v"

8.查看当前集群的所有实例

curl -XGET "http://ip:port/_cat/nodes?v"

9.查看某索引分片转移进度

curl -XGET "http://ip:port/_cat/recovery/索引名?v"

10.查看当前集群等待任务

curl -XGET "http://ip:port/_cat/pending_tasks?v"

11.查看集群写入线程池任务

curl -XGET "http://ip:port/_cat/thread_pool/bulk?v" 

12.查看集群查询线程池任务

curl -XGET "http://ip:port/_cat/thread_pool/search?v" 

13.查看分片未分配的原因

curl -XGET "http://127.0.0.1:24100/_cat/shards?v&h=index,shard,prirep,state,node,unassigned.reason" | grep UNASSIGNED

集群设置常用命令

1. 设置集群分片恢复参数

curl -XPUT   "http://ip:httpport/_cluster/settings"  -H  'Content-Type: application/json' -d' 
{ 
"transient": { 
   "cluster.routing.allocation.node_initial_primaries_recoveries":60,
   "cluster.routing.allocation.node_concurrent_recoveries":30,
   "cluster.routing.allocation.cluster_concurrent_rebalance":30
   } 
}'

2. 根据实例名称使EsNodeX实例下线:

curl -XPUT  "http://ip:httpport/_cluster/settings" -H 'Content-Type: application/json' -d' 
{ 
    "transient": { 
        "cluster.routing.allocation.exclude._name": "EsNode2@ip" 
     } 
}'

3. 根据ip使ES数据节点下线:

curl -XPUT  "http://ip:httpport/_cluster/settings" -H 'Content-Type: application/json' -d' 
{ 
    "transient": { 
          "cluster.routing.allocation.exclude._ip": "ip1,ip2,ip3" 
     } 
}'

4. 设置分片恢复过程中的最大带宽速度:

curl -XPUT "http://127.0.0.1:24100/_cluster/settings" -H 'Content-Type: application/json' -d
'{
 "transient":{
     "indices.recovery.max_bytes_per_sec":"500mb"
  }
}'

5. 重新分片为空的主分片

 curl -XPOST  "http://127.0.0.1:24100/_cluster/reroute?pretty" -H 'Content-Type:application/json' -d '
{
   "commands": [{
                "allocate_empty_primary": {		
                                      "index": "indexname",			
                                      "shard": 2,
                                      "node": "EsNode1@81.20.5.24",
                                      "accept_data_loss":true
                                           }
               }]
}'

6. 重新分配主分片,会尝试将过期副本分片分片为主。

curl -XPOST "http://127.0.0.1:24100/_cluster/reroute?pretty" -H 'Content-Type:application/json' -d '
{
   "commands": [{
               "allocate_stale_primary": {
                                        "index": "index1",
                                        "shard": 2,
			                "node": "EsNode1@189.39.172.103",
                                        "accept_data_loss":true
                                          }
               }]
}'

7. 清理ES所有缓存

curl -XPOST "http://ip:port/_cache/clear"

8.关闭分片自动平衡

curl -XPUT
 "http://ip:port/_cluster/settings" -H 'Content-Type:application/json' -d '
{
   "transient":{   "cluster.routing.rebalance.enable":"none" }
}'

9.手动刷新未分配的分片

curl -XPOST "http://127.0.0.1:24100/_cluster/reroute?retry_failed=true"

索引查看常用命令

1. 查询索引mapping和settings

curl -XGET --tlsv1.2  --negotiate -k -u : 'https://ip:port/my_index_name?pretty'

2. 查询索引settings

curl -XGET--tlsv1.2  --negotiate -k -u : 'https://ip:port/my_index_name/_settings?pretty'

3.查看分片未分配详细命令

curl -XGET "http://127.0.0.1:24100/_cluster/allocation/explain?pretty" -H 'Content-Type:application/json' -d '
{"index": "indexname","shard": 17,"primary": true}'

4.修改索引只读字段属性为null,放开写入

curl -XPUT  "http://127.0.0.1:24100/*/_settings" -H 'Content-Type: application/json' -d '{"index.blocks.read_only_allow_delete": null}'

索引设置常用命令

1.关闭索引

curl -XPOST 'http://ip:port/my_index/_close?pretty'

2.打开索引

curl -XPOST 'http://ip:port/my_index/_open?pretty'

3.修改索引刷新时间:

curl -XPUT 'http://ip:port/my_index/_settings?pretty' -H 'Content-Type: application/json' -d'{"refresh_interval" : "60s"}'

4.修改translog文件保留时长,默认为12小时

curl -XPUT 'http://ip:port/my_index/_settings?pretty' -H 'Content-Type: application/json' -d'{"index.translog.retention.age" : "30m"}'

5.设置索引副本:

curl -XPUT 'http://ip:port/my_index/_settings?pretty' -H 'Content-Type: application/json' -d'{"number_of_replicas" : 1}'

6.执行refresh,将内存数据刷新到磁盘缓存

curl -XPOST 'http://ip:port/myindex/_refresh'

7.执行flush,将磁盘缓存刷新到文件系统

curl -XPOST 'https://ip:port/myindex/_flush'

8.执行synced flush,生成syncid

curl -XPOST  'http://ip:port/_flush/synced'

9. 强制执行段合并

curl -XPOST 'http://ip:httpport/myindex/_forcemerge?only_expunge_deletes=false&max_num_segments=1&flush=true&pretty'

10.设置索引在每个esnode上的分片个数

curl -XPUT 'http://ip:httpport/myindex/_settings?pretty' -H 'Content-Type: application/json' -d'{"index.routing.allocation.total_shards_per_node" : "2"}'

11. 配置控制段合并的refresh、merge线程数等

curl -XPUT  "http://ip:port/my_index/_settings?pretty" -H 'Content-Type: application/json' -d'
{"refresh_interval": "60s",
 "merge":{"scheduler":{"max_merge_count" : "100",
                        "max_thread_count" : "1"},
          "policy":{"segments_per_tier" : "100",
                    "floor_segment" : "1m",
                    "max_merged_segment" : "2g"}
          }
}'

12.设置索引的刷新时间和translog配置参数

注意:设置translog参数,必须先关闭索引,设置完成后再打开

*代表设置所有索引,如果要设置具体某个索引,可以将*替换为具体的索引名称

curl -XPUT "http://ip:httpport/*/_settings" -H 'Content-Type: application/json' -d'
{ "index": 
          { "refresh_interval" : "60s",
            "translog": 
                      { "flush_threshold_size": "1GB", "sync_interval": "120s", "durability": "async" 
                      } 
          } 
}'

13.限制每个索引在每个实例上的分片个数

curl -XPUT  'http://ip:httpport/myindex/_settings?pretty' -H 'Content-Type:application/json' -d '{"index.routing.allocation.total_shards_per_node":"2"}'

实例检查常用命令

1.查看实例安装插件

curl -XGET "http://ip:port/_cat/aliases"

2.查询指定ES实例的jvm参数:

curl -XGET 'http://ip:port/_nodes/EsNode1*/stats/jvm?pretty'
curl -XGET 'http://ip:port/_nodes/EsNode1@12.40.16.156/stats/jvm?pretty'
作者 east
Elasticsearch 1月 31,2021

Elasticsearch规划及性能规格

影响因子分析

Elasticsearch组件的索引和查询性能主要受到物理资源(内存、磁盘、CPU、网络)和逻辑资源(数据类型、数据长度、分词类别)的影响。

物理资源

影响因子如:

  • 内存:内存大小会影响到写入数据的速度、缓存的多少。
  • 磁盘:磁盘的性能影响到索引数据写入磁盘的速度。
  • CPU:CPU的性能影响到分词的速度、处理倒排索引的速度等。
  • 网络:影响到分布式索引和查询消息处理的速度。

逻辑资源

影响因子如:

  • 数据类型:字符串、整型、浮点型,不同的数据类型对资源的消耗程度不同。
  • 数据长度:字段的大小对资源的消耗程度不同。
  • 分词类别:采用不同的分词器对资源的消耗程度不同。
  • shard个数划分:根据数据量的不同应当对index赋予不同的shard个数。

物理资源规划

频繁的请求下,Elasticsearch对内存、CPU、网络与磁盘的性能有较高的要求,一般情况下,建议Elasticsearch独占这些物理资源,尽量不与其他耗资源的组件合布。

磁盘使用必须使用SAS盘,不建议使用SATA盘进行存储。

内存配置

FusionInsight Elasticsearch单节点(node)默认分配的HeapSize为4GB,若机器内存的50%>实例数*31G,设置为31G,否则设置为机器内存的50%/实例数。资源允许的情况下,单个实例可以分配的最大HeapSize不要超过31GB。

另外,需要留下一半的物理内存作为Lucene缓存使用。如果不按照此建议设置,将会影响索引与查询的性能。

示例

  • 如果系统为128GB物理内存,那么建议留下64GB预留给Lucene缓存,剩下的64GB可以分配2个Elasticsearch节点(nodes)。每个节点分配31GB内存。
  • 如果系统为256GB物理内存,安装上面的计算实际上我们可以设置4个EsNode但是不建议安装4个。 说明: 256G及以上内存的机器只建议安装3个EsNode实例。虽然内存满足要求,但是由于受CPU核数的限制集群性能不会有太大提升。多余的内存Lucene也会全部利用了。

磁盘挂载

Elasticsearch单索引数据目前可以较优支持到TB级别,数据量庞大,建议Elasticsearch按照实例(nodes)进行单独挂盘。

示例

用户某个物理机上分配了两个Elasticsearch nodes,分别是EsNode1和EsNode2,一个实例对应写一个固定磁盘。需要为这两个实例挂载两个磁盘,挂载目录分别为“/srv/BigData/elasticsearch/esnode1/”和“/srv/BigData/elasticsearch/esnode2/”。

说明:

  • 磁盘类型不同,性能也相差巨大。如:SSD读写速度大约是SAS盘的50倍,而SAS盘读写速度可以达到SATA盘的2倍以上。
  • Elasticsearch的总实例数在500以上时,EsMaster必须使用SSD盘,且EsMaster可使用的CPU资源要大于等于32核。

shard个数规划

一个index可以被分为多个shards,从而分布到不同的物理机上。Shard的划分结果也会影响索引和查询速度。

每个分片都可以处理数据写入和查询请求,在设置索引分片数时,可从以下几个方面考虑:

  • 每个shard包含的数据条数越多,查询性能会降低(建议1亿条左右,最多建议不超过4亿)。
  • 建议单个分片保存的数据量在20GB左右,最大不超过30GB。
  • 根据索引预计承载的最大数据容量和单个分片容量确定主分片个数。一般来说,预计存储的数据量越大,应当分配的shard越多,分布式查询的优势越明显。如果确认某个index的数据量非常少(如一年不到1GB),那么过多的分配shard,反而可能不如单shard的性能好
  • 为了提升数据可靠性,合理设置副本分片个数,至少设置为1,如果集群的存储空间足够,推荐设置为2。
  • 每个node可以支撑的shards个数是有限的,node是物理资源分配的对象,随着shards中数据的增大,shards中的数据在查询时被不断加载到内存,达到一定量时,将会把HeapSize耗尽,导致频繁GC,系统将不能正常工作。推荐1GB内存管理15个shard,以一个Elasticsearch实例内存最大31G为例,单实例管理的shard数保持在500以内。
  • 当Elasticsearch集群实例数大于500时,请确保Elasticsearch集群的总shard数小于等于50000个。过多的shard数会导致EsMaster压力过大,Elasticsearch集群不稳定。

shard个数规划

一个index可以被分为多个shards,从而分布到不同的物理机上。Shard的划分结果也会影响索引和查询速度。

每个分片都可以处理数据写入和查询请求,在设置索引分片数时,可从以下几个方面考虑:

  • 每个shard包含的数据条数越多,查询性能会降低(建议1亿条左右,最多建议不超过4亿)。
  • 建议单个分片保存的数据量在20GB左右,最大不超过30GB。
  • 根据索引预计承载的最大数据容量和单个分片容量确定主分片个数。一般来说,预计存储的数据量越大,应当分配的shard越多,分布式查询的优势越明显。如果确认某个index的数据量非常少(如一年不到1GB),那么过多的分配shard,反而可能不如单shard的性能好
  • 为了提升数据可靠性,合理设置副本分片个数,至少设置为1,如果集群的存储空间足够,推荐设置为2。
  • 每个node可以支撑的shards个数是有限的,node是物理资源分配的对象,随着shards中数据的增大,shards中的数据在查询时被不断加载到内存,达到一定量时,将会把HeapSize耗尽,导致频繁GC,系统将不能正常工作。推荐1GB内存管理15个shard,以一个Elasticsearch实例内存最大31G为例,单实例管理的shard数保持在500以内。
  • 当Elasticsearch集群实例数大于500时,请确保Elasticsearch集群的总shard数小于等于50000个。过多的shard数会导致EsMaster压力过大,Elasticsearch集群不稳定。
作者 east
Android, bug清单 1月 5,2021

Android解决Only the original thread that created a view hierarchy can touch its views问题

 
比如在电话的应用程序中,有一个线程是RingTone,如果这个非UI线程中直接操作UI线程,会抛出android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views: 
   1. Why
       为什么会有这种异常产生呢?
       
      当每个应用程序apk第一次启动时,Android会同时启动一个对应的主线程(Main Thread),
      主线程负责处理与UI相关的事件,如:用户的按键事件,用户接触屏幕的事件以及屏幕绘图事件,
      并把相关的事件分发到对应的组件进行处理,所以主线程通常又被叫做UI线程。


      但是在开发Android应用时必须遵守单线程模型的原则: 
      Android UI操作并不是线程安全的并且这些操作必须在UI线程中执行,如果在非UI线程中直接操作UI线程,
      会抛出android.view.ViewRoot$CalledFromWrongThreadException: Only the original thread that 
      created a view hierarchy can touch its views,这与普通的java程序不同。


       由于UI线程负责事件的监听和绘图,因此,必须保证UI线程能够随时响应用户的需求,
       UI线程里的操作应该向中断事件那样短小,费时的操作(如网络连接)需要另开线程,
       否则,如果UI线程超过5s没有响应用户请求,会弹出对话框提醒用户终止应用程序(ANP)。


       如果在新开的线程中需要对UI进行设定,就可能违反单线程模型,
       因此android采用一种的Message Queue机制保证线程间通信。


       Message Queue是一个消息队列,用来存放通过Handler发送的消息。
       Android在第一启动程序时会默认会为UI thread创建一个关联的消息队列,
      可以通过Looper.myQueue()得到当前线程的消息队列,用来管理程序的一些上层组件,
      activities,broadcast receivers 等,你可以在自己的子线程中创建Handler与UI thread通讯。


      Handler会向message queue通过两种方法发送消息:send或post。
      这两种消息都会插在message queue队尾并按先进先出执行,
      但通过这两种方法发送的消息执行的方式略有不同:
      1)通过send发送的是一个message对象, 会被handler的 handleMessage()函数处理;
      2)而通过post方法发送的是一个runnable对象,则会自己执行。


      每个带图形界面的应用启动后,都会创建一个主线程,可称之为UI线程。
      这个线程自动就会创建一个message queue,来自于系统的消息都会投放到这个message queue里面,
      并按先进先出的顺序处理。


      UI线程图形界面中的view可通过post方法向GUI线程的message queue投递一个runnable。
     对于除UI线程以外的其他线程,创建时缺省并没有message queue,
     而对于UI线程,则可以直接(比如在onCreate)创建一个handler并重载handleMessage,
     省去创建message queue的过程。
作者 east
Android, bug清单 1月 5,2021

Volley解决接收数据出现中文显示乱码问题

Volley接收数据后,若收到的数据header内无charset定义,则使用其默认的”ISO-8859-1″格式进行解析,导致乱码出现。

解决方法:

1. 自定义request,重写parseNetworkResponse方法:

 
private class mJsonRequest extends JsonObjectRequest {  
  
        /** 
         * <p>Description:{转码}</p> 
         * @author:yangbiyao@163.com 
         * @see com.android.volley.toolbox.JsonObjectRequest#parseNetworkResponse(com.android.volley.NetworkResponse) 
         */  
        @Override  
        protected Response<JSONObject> parseNetworkResponse(NetworkResponse response) {  
            try {  
                response.headers.put("HTTP.CONTENT_TYPE", "utf-8");  
//                String jsonString = new String(response.data, HttpHeaderParser.parseCharset(response.headers));  
                String jsonString = new String(response.data,"utf-8");  
                return Response.success(new JSONObject(jsonString), HttpHeaderParser.parseCacheHeaders(response));  
            }  
            catch (UnsupportedEncodingException e) {  
                return Response.error(new ParseError(e));  
            }  
            catch (JSONException je) {  
                return Response.error(new ParseError(je));  
            }  
        }  
  
        /** 
         * @param method 
         * @param url 
         * @param jsonRequest 
         * @param listener 
         * @param errorListener 
         */  
        public mJsonRequest(int method, String url, JSONObject jsonRequest, Listener<JSONObject> listener,  
                ErrorListener errorListener) {  
            super(method, url, jsonRequest, listener, errorListener);  
        }  
  
        /** 
         * @param url 
         * @param jsonRequest 
         * @param listener 
         * @param errorListener 
         */  
        public mJsonRequest(String url, JSONObject jsonRequest, Listener<JSONObject> listener,  
                ErrorListener errorListener) {  
            super(url, jsonRequest, listener, errorListener);  
        }  
  
    }  

 
String jsonString = new String(response.data,"utf-8");  

在此转为我们想要的utf-8格式即可。

方法 2:

直接将数据转码为我们想要的utf-8(或GBK):

new String(data.getBytes(“ISO-8859-1″),”utf-8”)

data为乱码的数据。

作者 east
Android 1月 5,2021

android http请求带中文参数会乱码(url编码)

URL url = new URL(“http://www.my400800.cn &search=400电话 “);   HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();

时传递到服务端的中文字符时乱码,最后是将要发送的字符经过编号就可以了代码修改如下:

 URL url = new URL(“http://www.my400800.cn &search=”+java.net.URLEncoder.encode(“400电话 “));   HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();

作者 east
bug清单, Java 1月 4,2021

SpringBoot 接口返回的 JSON 数据的时间与数据存储时间有误差

在做一个项目,接入数据存到数据库,在图层上展示今天、昨天的数据。但是发现展示的时间有误差。

 
使用MySQL57,(程序中打印的时间字段)查询出的时间字段总是和数据库存储的相差两个小时。
最后是通过修改数据库连接解决了这个问题。添加了下面这个属性。
&serverTimezone=Asia/Shanghai
接着又出现问题了。
默认情况下使用 @ResponseBody ,项目返回的JSON数据,返回对象会自动转为JSON格式,但是对象中的日期格式Date字段转换的时候相差了八小时,程序内打印时间没有问题,如果将 Date 改为 String 类型的话,也不会出现这种情况了。
所以问题应该出在返回结果格式化为JSON的这个过程中。
原因是spring转json的默认实现jackson中会根据时区去转换时间,而jackson的默认时区跟国内应该是相差8小时,所以在时间换算上自动减去了8小时。
可以通过jackson 的注解 @JsonFormat 解决问题
@JsonFormat(pattern="yyyy-MM-dd HH:mm:ss" ,timezone = "GMT+8") private Date createTime; @JsonFormat(pattern="yyyy-MM-dd HH:mm:ss" ,timezone = "GMT+8") private Date updateTime;
也可以在 SpringBoot 配置文件中统一配置,推荐使用这种方式:
  spring.jackson.date-format=yyyy-MM-dd HH:mm:ss   spring.jackson.time-zone=GTM+8
作者 east
bug清单, Java 1月 4,2021

springboot内嵌tomcat文件上传路径不存在bug解决

在线上环境容易出现一些开发环境没遇到的问题。就像这个问题,springboot内嵌tomcat,上传文件时会存放到tomcat临时文件目录(停止时删除/重启时新建),如:/tmp/tomcat.1046709481715876128.17301/work/Tomcat/localhost/cms

可知文件保存在/tmp目录下,/tmp目录在centos下会定时清理,大约10天未使用将会删除目录,(当tomcat未重启,但centos删除相应目录,tomcat获取相应目录却获取不到会报错)

 
解决方案:
一 配置multipartFile上传路径(推荐)
1.application.properties 文件中添加
spring.http.multipart.location=${tmp.file.path} 注意:tmp.file.path 如果不存在,spring会认为是相对路径,对应根路径是tomcat临时文件目录 2
2.配置相应bean
/** * 文件上传临时路径 */ @Bean MultipartConfigElement multipartConfigElement() { MultipartConfigFactory factory = new MultipartConfigFactory(); factory.setLocation("/data/ops/app/cms/cache"); return factor 246810121416
二 修改tomcat临时存放文件位置(不建议)
application.properties 文件中添加 (此方法会讲所有tomcat临时文件放在指定目录,新目录没有定时清理功能,不建议)
server.tomcat.basedir=/data/ops/app/cms/cache 2
三 修改centos定时清理功能(不建议)
vim /etc/cron.daily/tmpwatch
#! /bin/sh flags=-umc /usr/sbin/tmpwatch "$flags" -x /tmp/.X11-unix -x /tmp/.XIM-unix \ -x /tmp/.font-unix -x /tmp/.ICE-unix -x /tmp/.Test-unix \ -X '/tmp/hsperfdata_*' 10d /tmp \ -X '/tmp/tomcat.*' 10d /tmp /usr/sbin/tmpwatch "$flags" 30d /var/tmp for d in /var/{cache/man,catman}/{cat?,X11R6/cat?,local/cat?}; do if [ -d "$d" ]; then /usr/sbin/tmpwatch "$flags" -f 30d "$d" fi done 24681012141618202224
其中添加一行
-X '/tmp/tomcat.*' 10d /tmp
作者 east
Java 1月 4,2021

springboot使用 @scheduled 多任务并发

springboot的@scheduled,并不是默认并发的,想给方法添加@Scheduled注解,实现两个定时任务。可是运行发现,两个task并没有并发执行,而是执行完一个task才会执行另外一个。

要 给类添加注解@EnableAsync,并给方法添加注解@Async。

 
@Component
@Configurable
@EnableScheduling
@EnableAsync
public class DemoTask {
@Async
@Scheduled(cron = "0/5 * *  * * ? ")
public void startSchedule() {
System.out.println("===========1=>");
try {
for(int i=1;i<=10;i++){
System.out.println("=1==>"+i);
Thread.sleep(1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
 
@Async
@Scheduled(cron = "0/5 * *  * * ? ")
public void startSchedule2() {
for(int i=1;i<=10;i++){
System.out.println("=2==>"+i);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}

在这个类或启动类BootApplication添加@EnableScheduling标注

作者 east
数据库 1月 4,2021

mysql主从复制

 
配置Master服务器(主服务器)
1、更改主服务器MySQL配置文件,/etc/my.cnf,检查二进制日志log-bin是否开启了,把server-id设置为1

[mysqld]
log-bin=mysql-bin
binlog_format=mixed
server-id = 1

binlog-ignore-db = db1
#这是不记录binlog,来达到从库不同步mysql库,以确保各自权限
binlog-ignore-db = performance_schema
binlog-ignore-db = information_schema
2、创建一个从服务器链接主服务器的帐号 (1)、在命令行下登录mysql:

# mysql -uroot -p
(2)、首先创建一个名为:jp,密码为:123456的帐号

SQL
mysql> grant replication slave on *.* to 'jp'@172.105.218.12 identified by 'east1016';
Query OK, 0 rows affected (0.52 sec)

刷新权限
flush privileges;
作者 east
数据库 1月 4,2021

修改my.ini导致启动不了服务

修改了my.ini,一直出现“本地计算机上的MySQL服务启动后停止。某些服务在未由其他服务或程序使用时将自动”,可以用mysqld –console 命令来查看具体原因。制定配置文件mysqld.exe –defaults-file=”D:/soft/mysql-8.0.16-winx64/my.ini” –initialize –consolewin10 mysql8的配置文件my.ini路径不用双引号basedir =D:\\soft\mysql-8.0.16-winx64datadir =D:\\soft\\mysql-8.0.16-winx64\\data

作者 east
bug清单, Java 1月 4,2021

Spring Boot Maven项目使用SystemPath引用线上部署遇到的问题

使用了第三方Jar包,最先考虑的是不使用Maven仓库,便于离线开发。首先采用了方案:

 <dependency>
        <groupId>com.tievd.third</groupId>
        <artifactId>arcvideo</artifactId>
        <version>1.0</version>
        <scope>system</scope>
        <systemPath>${basedir}/lib/face-api-1.0.jar</systemPath>
    </dependency>

但很多人讲到这里就没讲了,你会发现在IDE里会运行的非常好,一旦部署在线上环境,就会出现莫名其妙的问题。比如我遇到的不会抛异常,会一直卡在对象创建上。后来一直找不到问题出现在哪里,就改用了私服,发现问题解决,所以定位在问题肯定出现在打包上:第一步:确认解压之前的Jar包发现确实没有把第三方包打入进去第二步:在build节点加入一下语句使包正确的导入

   <resources>
            <resource>
                <directory>${project.basedir}/lib</directory>
                <targetPath>BOOT-INF/lib/</targetPath>
                        <includes>
                           <include>**/*.jar</include>
                        </includes>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <targetPath>BOOT-INF/classes/</targetPath>
            </resource>
</resources>

  • 重新打包发现可以在线上环境正常部署了。
作者 east

1 2 下一个

关注公众号“大模型全栈程序员”回复“小程序”获取1000个小程序打包源码。回复”chatgpt”获取免注册可用chatgpt。回复“大数据”获取多本大数据电子书

标签

AIGC AI创作 bert chatgpt github GPT-3 gpt3 GTP-3 hive mysql O2O tensorflow UI控件 不含后台 交流 共享经济 出行 图像 地图定位 外卖 多媒体 娱乐 小程序 布局 带后台完整项目 开源项目 搜索 支付 效率 教育 日历 机器学习 深度学习 物流 用户系统 电商 画图 画布(canvas) 社交 签到 联网 读书 资讯 阅读 预订

官方QQ群

小程序开发群:74052405

大数据开发群: 952493060

近期文章

  • 详解Python当中的pip常用命令
  • AUTOSAR如何在多个供应商交付的配置中避免ARXML不兼容?
  • C++thread pool(线程池)设计应关注哪些扩展性问题?
  • 各类MCAL(Microcontroller Abstraction Layer)如何与AUTOSAR工具链解耦?
  • 如何设计AUTOSAR中的“域控制器”以支持未来扩展?
  • C++ 中避免悬挂引用的企业策略有哪些?
  • 嵌入式电机:如何在低速和高负载状态下保持FOC(Field-Oriented Control)算法的电流控制稳定?
  • C++如何在插件式架构中使用反射实现模块隔离?
  • C++如何追踪内存泄漏(valgrind/ASan等)并定位到业务代码?
  • C++大型系统中如何组织头文件和依赖树?

文章归档

  • 2025年6月
  • 2025年5月
  • 2025年4月
  • 2025年3月
  • 2025年2月
  • 2025年1月
  • 2024年12月
  • 2024年11月
  • 2024年10月
  • 2024年9月
  • 2024年8月
  • 2024年7月
  • 2024年6月
  • 2024年5月
  • 2024年4月
  • 2024年3月
  • 2023年11月
  • 2023年10月
  • 2023年9月
  • 2023年8月
  • 2023年7月
  • 2023年6月
  • 2023年5月
  • 2023年4月
  • 2023年3月
  • 2023年1月
  • 2022年11月
  • 2022年10月
  • 2022年9月
  • 2022年8月
  • 2022年7月
  • 2022年6月
  • 2022年5月
  • 2022年4月
  • 2022年3月
  • 2022年2月
  • 2022年1月
  • 2021年12月
  • 2021年11月
  • 2021年9月
  • 2021年8月
  • 2021年7月
  • 2021年6月
  • 2021年5月
  • 2021年4月
  • 2021年3月
  • 2021年2月
  • 2021年1月
  • 2020年12月
  • 2020年11月
  • 2020年10月
  • 2020年9月
  • 2020年8月
  • 2020年7月
  • 2020年6月
  • 2020年5月
  • 2020年4月
  • 2020年3月
  • 2020年2月
  • 2020年1月
  • 2019年7月
  • 2019年6月
  • 2019年5月
  • 2019年4月
  • 2019年3月
  • 2019年2月
  • 2019年1月
  • 2018年12月
  • 2018年7月
  • 2018年6月

分类目录

  • Android (73)
  • bug清单 (79)
  • C++ (34)
  • Fuchsia (15)
  • php (4)
  • python (43)
  • sklearn (1)
  • 云计算 (20)
  • 人工智能 (61)
    • chatgpt (21)
      • 提示词 (6)
    • Keras (1)
    • Tensorflow (3)
    • 大模型 (1)
    • 智能体 (4)
    • 深度学习 (14)
  • 储能 (44)
  • 前端 (4)
  • 大数据开发 (488)
    • CDH (6)
    • datax (4)
    • doris (30)
    • Elasticsearch (15)
    • Flink (78)
    • flume (7)
    • Hadoop (19)
    • Hbase (23)
    • Hive (40)
    • Impala (2)
    • Java (71)
    • Kafka (10)
    • neo4j (5)
    • shardingsphere (6)
    • solr (5)
    • Spark (99)
    • spring (11)
    • 数据仓库 (9)
    • 数据挖掘 (7)
    • 海豚调度器 (10)
    • 运维 (34)
      • Docker (3)
  • 小游戏代码 (1)
  • 小程序代码 (139)
    • O2O (16)
    • UI控件 (5)
    • 互联网类 (23)
    • 企业类 (6)
    • 地图定位 (9)
    • 多媒体 (6)
    • 工具类 (25)
    • 电商类 (22)
    • 社交 (7)
    • 行业软件 (7)
    • 资讯读书 (11)
  • 嵌入式 (70)
    • autosar (63)
    • RTOS (1)
    • 总线 (1)
  • 开发博客 (16)
    • Harmony (9)
  • 技术架构 (6)
  • 数据库 (32)
    • mongodb (1)
    • mysql (13)
    • pgsql (2)
    • redis (1)
    • tdengine (4)
  • 未分类 (6)
  • 程序员网赚 (20)
    • 广告联盟 (3)
    • 私域流量 (5)
    • 自媒体 (5)
  • 量化投资 (4)
  • 面试 (14)

功能

  • 登录
  • 文章RSS
  • 评论RSS
  • WordPress.org

All Rights Reserved by Gitweixin.本站收集网友上传代码, 如有侵犯版权,请发邮件联系yiyuyos@gmail.com删除.