深入理解JVM(③)虛擬機的類加載時機

前言

Java虛擬機把描述類的數據從Class文件加載到內存,並對數據進行校驗、轉換解析和初始化,最終形成可以被虛擬機直接使用的Java類型,這個過程被稱為虛擬機的類加載機制。

類加載的時機

一個類型從被加載到虛擬機內存中開始,到卸載除內存為止,它的生命周期將會經歷加載(Loading)、驗證(Verification)、準備(Preparation)、解析(Resolution)、初始化(Initialization)、使用(Using)和 卸載(Unloading)、七個階段,其中驗證、準備、解析三個部分統稱為連接(Linking)。
類的生命周期如下圖:

其實加載、驗證、準備、初始化和卸載這五個階段的順序是確定的,類型的加載過程必須按照這種順序按部就班地開始,而解析階段則不一定:它在某些情況下可以在初始化階段之後再開始,這是為了支持Java語音的運行時綁定特性(也稱為動態綁定或晚期綁定)。
在什麼情況下需要開始類加載過程的第一個階段“加載”,《Java虛擬機規則》中並沒有進行強制約束,但是對於初始化階段《Java虛擬機規範》則是嚴格規定了有且只有以下六種情況必須立即對類進行“初始化”。

  1. 遇到newgetstaticputstaticinvokestatic這四條字節碼指令時,如果類型沒有進行過初始化,則需要先觸發其初始化階段。
    涉及到這四條指令的典型場景有:
  • 使用new關鍵字實例化對的時候。
  • 讀取或設置一個類型的靜態字段(被final修飾、已在編譯期把結果放入常量池的靜態字段除外)的時候。
  • 調用一個類型的靜態方法的時候。
  1. 使用 java.lang.reflect 包的方法對類型進行反射調用的時候,如果類型沒有進行過初始化,則需要先觸發其初始化。
  2. 當初始化類型的時候,如果發現其父類還沒有進行過初始化,則需要先觸發其父類的初始化。
  3. 當虛擬機啟動時,用戶需要指定一個要執行的主類(包含main()方法的那個類),虛擬機會先初始化這個主類。
  4. 當使用JDK7新加入的動態語言支持時,如果一個java.lang.invoke.MethodHandle實例最後的解析結果為REF_getStatic、REF_putStatic、REF_invokeStatic、REF_newInvokeSpecial四種類型的方法句柄,並且這個方法句柄對應的類沒有進行過初始化,則需要先觸發其初始化。
  5. 當一個接口中定義了JDK8新加入的默認方法(被default關鍵字修飾的接口方法)時,如果這個接口的實現類發生了初始化,那該接口要在其之前被初始化。
    除了以上的這個六種場景外,所有引用類型的方式都不會觸發初始化,稱為被動引用。
    下面來看一下哪些是被動引用:

例子1:

父類

package com.jimoer.classloading;

/**
 * @author jimoer
 * @date Create in 2020/06/24 16:08
 * @description 通過子類引用父類的靜態字段,不會導致子類初始化。
 */
public class FatherClass {

    static {
        System.out.println("FatherClass init!!!!!");
    }

    public static int value = 666;

}

子類

package com.jimoer.classloading;

public class SonClass extends FatherClass{

    static {
        System.out.println("SonClass init!!!");
    }

}

測試類

@Test
public void testInitClass(){
    System.out.println(SonClass.value);
}

運行結果:

FatherClass init!!!!!
666

通過運行結果我們看到,只輸出了“FatherClass init!!!!!”,並沒有輸出“SubClass init!!!”,這是因為對於使用靜態字段,只有直接定義這個字段的類才會被初始化,因此通過子類來引用父類中定義的靜態字段,並不會初始化子類。

例子2:

/**
 * 通過數組定義來引用類,不會觸發此類的初始化
 */
@Test
public void testInitClass2(){
    FatherClass[] fathers = new FatherClass[5];
}

運行結果:未打印任何信息。
通過運行結果我們發現,並沒有打印出 FatherClass init!!!!! ,這說明並沒有觸發Father類的初始化階段。但是這段代碼裏面觸發了另一個名為“[Lcom.jimoer.classloading.FatherClass”的類的初始化階段,它是一個由虛擬機自動生成的、直接繼承與java.lang.Object的子類,創建動作由字節碼newarray觸發。這個類代表了一個元素類型為FatherClass的一維數組,數組中應用的屬性和方法(length屬性和clone()方法)都實現在這個類里。

例子3:

/**
 * @author jimoer
 * 常量在編譯階段會存入調用類的常量池中,
 * 本質上沒有直接引用到定義常量的類,
 * 因此不會觸發定義常量的類的初始化。
 */
public class ConstantClass {
    
    static {
        System.out.println("ConstantClass init !!!");
    }
    
    public static final String CLASS_LOAD = "class load test !!!";
    
}

使用

/**
 * 使用常量
 */
@Test
public void testInitClass3(){
    System.out.println(ConstantClass.CLASS_LOAD);
}

運行結果:

class load test !!!

通過運行結果,我們看到當在使用一個類的常量時,並不會初始化定義了常量的類。這是因為雖然在Java源碼中確實引用了ConstatClass的類的常量CLASS_LOAD,但其實在編譯階段通過常量傳播優化,已經將此常量的值“class load test !!!”直接存儲在使用常量的類中的常量池中了,所以在使用ConstantClass.CLASS_LOAD時候,實際上都被轉化為在使用類自身的常量池的引用了。

接口也是有初始化過程的,上面的代碼都是用靜態語句塊“static {}”來輸出初始化信息的,而接口中不能使用static{}語句塊,但編譯器仍然會為接口生成“ ()”類構造器,用於初始化接口中所定義的成員變量。
還有一點接口與類不同,當一個類在初始化時,要求其父類全部都已經初始化過了,但是在一個接口初始化時,並不要求其父接口全部都完成了初始化,只有在真正使用到父接口的時候(例如引用接口中的常量)才會初始化。

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

※別再煩惱如何寫文案,掌握八大原則!

高盛:再下60億美元資本 特斯拉就能顛覆汽車界

上周,高盛分析師派翠克•阿爾尚博(Patrick Archambault)指出,特斯拉或許需要再投入60億美元現金(尤其在2017年至2025年之間),才能實現“到2020年電動汽車的年產量達到50萬輛”的目標,從而顛覆汽車市場。   而特斯拉希望在明年年底前交付10萬輛電動汽車,其中包括Model S和即將推出的Model X。阿爾尚博預測,特斯拉要實現既定目標,到2025年為止將需要生產180萬至320萬輛電動汽車。但是,屆時如果特斯拉未能實現這些生產目標,電池工廠所生產的多餘電池將可能最終由太陽能公司SolarCity所消化。   特斯拉已經為SolarCity生產了少量的蓄電元件,超級電池工廠竣工後將滿足SolarCity部分或全部的耗電需求。馬斯克表示,兩家公司能以獨特的方式相互相容。如果更多的美國人能接受太陽能用於住宅和商業供電,特斯拉及其電池製造合作夥伴松下就能把超級電池工廠過剩產能所餘下的蓄電元件提供給SolarCity。超級電池工廠每年將為特斯拉生產50萬件電池組,因此,特斯拉不打算成為SolarCity蓄電組件的主要供應商。但如果特斯拉達不到生產目標,超級電池工廠就可能為SolarCity多出出力。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

※教你寫出一流的銷售文案?

※超省錢租車方案

Docker(三)Docker常用命令

Docker常用命令

幫助命令

# 显示 Docker 版本信息
docker version  

# 显示系統信息,包括鏡像和容器的數量
docker info 

# 查看幫助文檔 幫助文檔地址:https://docs.docker.com/reference/
docker [命令] --help  

鏡像命令

查看最近創建的鏡像

docker images 查看最近創建的鏡像

docker images [OPTIONS] [REPOSITORY[:TAG]]

# 幫助文檔
[root@hwh1 ~]# docker images --help 
Usage:	docker images [OPTIONS] [REPOSITORY[:TAG]]
List images
Options:
  -a, --all             Show all images (default hides intermediate images)    显示所有鏡像
      --digests         Show digests                                           显示摘要
  -f, --filter filter   Filter output based on conditions provided             根據提供的條件過濾輸出
      --format string   Pretty-print images using a Go template                用 Go 模板打印出一個圖像
      --no-trunc        Don't truncate output                                  不截斷輸出
  -q, --quiet           Only show numeric IDs                                  只显示数字 ID

# 查看最近創建的鏡像
# REPOSITORY  鏡像的倉庫源
# TAG  鏡像的標籤
# IMAGE ID  鏡像的id
# CREATED  鏡像的創建時間
# SIZE  鏡像的大小
[root@hwh1 ~]# docker images   
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              bf756fb1ae65        5 months ago        13.3kB

# 查看所有鏡像
[root@hwh1 ~]# docker images -a
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              bf756fb1ae65        5 months ago        13.3kB

# 只显示数字 ID
[root@hwh1 ~]# docker images -q
bf756fb1ae65

搜索鏡像

docker search 搜索鏡像

docker search [OPTIONS] TERM

[root@hwh1 ~]# docker search --help 
Usage:	docker search [OPTIONS] TERM
Search the Docker Hub for images
Options:
  -f, --filter filter   Filter output based on conditions provided   根據提供的條件過濾輸出
      --format string   Pretty-print search using a Go template      用 Go 模板打印出一個圖像
      --limit int       Max number of search results (default 25)    搜索結果的最大值限制
      --no-trunc        Don't truncate output                       不截斷輸出


[root@hwh1 ~]# docker search mysql
NAME                              DESCRIPTION                                     STARS    OFFICIAL            AUTOMATED
mysql                             MySQL is a widely used, open-source relation…   9626

下載鏡像

docker pull 下載鏡像

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

[root@hwh1 ~]# docker pull --help 
Usage:	docker pull [OPTIONS] NAME[:TAG|@DIGEST]
Pull an image or a repository from a registry
Options:
  -a, --all-tags                Download all tagged images in the repository      下載倉庫中標記所有的鏡像,拿來選擇版本
      --disable-content-trust   Skip image verification (default true)            跳過圖像驗證       
      --platform string         Set platform if server is multi-platform capable  如果服務器支持多平台,則設置平台
 -q, --quiet                   Suppress verbose output                           禁止詳細輸出              

# 下載鏡像
[root@hwh1 ~]# docker pull mysql
Using default tag: latest                     # 版本信息(默認不設置tag,則為最新版)
latest: Pulling from library/mysql           
8559a31e96f4: Pull complete                   # 分層下載,docker image 的核心,聯合文件系統
d51ce1c2e575: Pull complete 
c2344adc4858: Pull complete 
fcf3ceff18fc: Pull complete 
16da0c38dc5b: Pull complete 
b905d1797e97: Pull complete 
4b50d1c6b05c: Pull complete 
c75914a65ca2: Pull complete 
1ae8042bdd09: Pull complete 
453ac13c00a3: Pull complete 
9e680cd72f08: Pull complete 
a6b5dc864b6c: Pull complete 
Digest: sha256:8b7b328a7ff6de46ef96bcf83af048cb00a1c86282bfca0cb119c84568b4caf6          # 簽名
Status: Downloaded newer image for mysql:latest 
docker.io/library/mysql:latest                 # 真實地址

刪除鏡像

docker rmi 刪除鏡像

docker rmi [OPTIONS] IMAGE [IMAGE...]

[root@hwh1 ~]# docker rmi --help 
Usage:	docker rmi [OPTIONS] IMAGE [IMAGE...]
Remove one or more images
Options:
  -f, --force      Force removal of the image        強制刪除鏡像
      --no-prune   Do not delete untagged parents    不刪除未標記的父類


# 刪除指定鏡像
[root@hwh1 ~]# docker rmi mysql 
Untagged: mysql:latest
Untagged: mysql@sha256:8b7b328a7ff6de46ef96bcf83af048cb00a1c86282bfca0cb119c84568b4caf6
Deleted: sha256:be0dbf01a0f3f46fc8c88b67696e74e7005c3e16d9071032fa0cd89773771576
Deleted: sha256:086d66e8d1cb0d52e9337eabb11fb9b95960e2e1628d90100c62ea5e8bf72306
Deleted: sha256:f37c61ee1973b18c285d0d5fcf02da4bcdb1f3920981499d2a20b2858500a110
Deleted: sha256:e40b8bca7dc63fc8d188a412328e56caf179022f5e5d5b323aae57d233fb1069
Deleted: sha256:339f6b96b27eb035cbedc510adad2560132925a835f0afddbcc1d311c961c14b
Deleted: sha256:d38b06cdb26a5c98857ddbc6ef531d3f57b00e325c0c314600b712efc7ff6ab0
Deleted: sha256:09687cd9cdf4c704fde969fdba370c2d848bc614689712bef1a31d0d581f2007
Deleted: sha256:b704a4a65bf536f82e5d8b86e633d19185e26313de8380162e778feb2852011a
Deleted: sha256:c37206160543786228aa0cce738e85343173851faa44bb4dc07dc9b7dc4ff1c1
Deleted: sha256:12912c9ec523f648130e663d9d4f0a47c1841a0064d4152bcf7b2a97f96326eb
Deleted: sha256:57d29ad88aa49f0f439592755722e70710501b366e2be6125c95accc43464844
Deleted: sha256:b17c024283d0302615c6f0c825137da9db607d49a83d2215a79733afbbaeb7c3
Deleted: sha256:13cb14c2acd34e45446a50af25cb05095a17624678dbafbcc9e26086547c1d74

# 遞歸刪除(批量刪除)
[root@hwh1 ~]# docker rmi -f $(docker images -aq)
Untagged: hello-world:latest
Untagged: hello-world@sha256:6a65f928fb91fcfbc963f7aa6d57c8eeb426ad9a20c7ee045538ef34847f44f1
Deleted: sha256:bf756fb1ae65adf866bd8c456593cd24beb6a0a061dedf42b26a993176745f6b
# 已全部刪除
[root@hwh1 ~]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

容器命令

注:下載一個 centos 鏡像測試

新建容器並啟動

docker run 新建容器並啟動

[root@hwh1 ~]# docker pull centos
Using default tag: latest
latest: Pulling from library/centos
8a29a15cefae: Pull complete 
Digest: sha256:fe8d824220415eed5477b63addf40fb06c3b049404242b31982106ac204f6700
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest

docker run

[root@hwh1 ~]# docker run --help 
Usage:	docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
Run a command in a new container
Options:
      -d, --detach                     Run container in background and print 
                                          container ID                           後台方式運行
      --name string                    Assign a name to the container            容器名字,來區分容器
      -i, --interactive                Keep STDIN open even if not attached      使用交互方式,進入容器查詢內容
      -t, --tty                        Allocate a pseudo-TTY                     使用交互方式,進入容器查詢內容
      -p, --publish list               Publish a container's port(s) to the host 指定容器端口 
          -p 主機端口:容器端口
          -p 容器端口
          -p ip:主機端口:容器端口
          容器端口
      -P, --publish-all                Publish all exposed ports to random ports 隨機端口
      

# 啟動並進入容器,相當於一個小型虛擬機
[root@hwh1 ~]# docker run  -it centos /bin/bash
[root@af833bdd3acf /]# ls      # 基礎版 centos 很多命令都不完善
bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
[root@af833bdd3acf /]# exit    # 退出命令
exit

列出所有正在運行的容器

docker ps 列出所有正在運行的容器

docker ps [OPTIONS]

[root@hwh1 ~]# docker ps --help
Usage:	docker ps [OPTIONS]
List containers
Options:
  -a, --all             Show all containers (default shows just running)           列出所有的容器,包括正在運行和停止的
  -f, --filter filter   Filter output based on conditions provided                 
      --format string   Pretty-print containers using a Go template
  -n, --last int        Show n last created containers (includes all states)       列出最近運行的容器
                        (default -1)
  -l, --latest          Show the latest created container (includes all states)    显示最後創建的容器
      --no-trunc        Don't truncate output                                      不截斷輸出
  -q, --quiet           Only display numeric IDs                                   只显示数字 ID
  -s, --size            Display total file sizes                                   显示文件總大小


[root@hwh1 ~]# docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
a0f986785f33        centos              "/bin/bash"         7 seconds ago       Up 5 seconds                            nervous_agnesi
[root@hwh1 ~]# docker ps -n=1
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
a0f986785f33        centos              "/bin/bash"         6 minutes ago       Up 6 minutes                            nervous_agnesi
[root@hwh1 ~]# docker ps -q
a0f986785f33

退出容器

exit             # 直接容器停止並退出
Ctrl + P + Q     # 不停止容器退出(快捷鍵)

刪除容器

docker rm 刪除容器

docker rm [OPTIONS] CONTAINER [CONTAINER...]

[root@hwh1 ~]# docker rm --help 
Usage:	docker rm [OPTIONS] CONTAINER [CONTAINER...]
Remove one or more containers
Options:
  -f, --force     Force the removal of a running container (uses SIGKILL)      強制刪除正在運行的容器
  -l, --link      Remove the specified link                                    刪除指定的鏈接
  -v, --volumes   Remove anonymous volumes associated with the container       刪除與容器關聯的匿名卷

[root@hwh1 ~]# docker rm af833bdd3acf      刪除已經停止的
af833bdd3acf
[root@hwh1 ~]# docker rm -f a0f986785f33   刪除正在運行的容器
a0f986785f33

# docker ps -a -q|xargs docker rm    # 刪除所有的容器,使用管道符

啟動和停止容器操作

docker start id       # 啟動
docker restart id     # 重啟
docker stop id        # 停止當前正在運行的容器
docker kill id        # 強制停止當前容器

[root@hwh1 ~]# docker start 7b28015cd7f6
7b28015cd7f6
[root@hwh1 ~]# docker restart 7b28015cd7f6
7b28015cd7f6
[root@hwh1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                   PORTS               NAMES
7b28015cd7f6        centos              "/bin/bash"         46 seconds ago      Up 9 seconds                                 unruffled_wiles
e2ff2fee0669        bf756fb1ae65        "/hello"            12 days ago         Exited (0) 12 days ago                       amazing_nightingale
690a9f41c7a8        bf756fb1ae65        "/hello"            12 days ago         Exited (0) 12 days ago                       zealous_blackwell
[root@hwh1 ~]# docker stop 7b28015cd7f6
7b28015cd7f6
[root@hwh1 ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS              NAMES
7b28015cd7f6        centos              "/bin/bash"         57 seconds ago      Exited (0) 2 seconds ago                      unruffled_wiles
e2ff2fee0669        bf756fb1ae65        "/hello"            12 days ago         Exited (0) 12 days ago                         amazing_nightingale
690a9f41c7a8        bf756fb1ae65        "/hello"            12 days ago         Exited (0) 12 days ago       

常用的其他命令

後台啟動容器

# docker run -d 鏡像名
[root@hwh1 ~]# docker run -d centos
9e34ebe17e41fb762f535ab21d81240b5fb4b105a44ed13c8813a8a8978f9b27
# 問題:
# docker ps -a,發現服務停止了
# 常見的坑:
# docker 容器使用後台運行,就必須要有要一個前台進程,docker發現沒有應用,就會自動停止

查看日誌

docker logs [OPTIONS] CONTAINER

[root@hwh1 ~]# docker logs --help
Usage:	docker logs [OPTIONS] CONTAINER
Fetch the logs of a container
Options:
      --details        Show extra details provided to logs                         显示額外的詳細信息
  -f, --follow         Follow log output                                           跟蹤日誌輸出
      --since string   Show logs since timestamp (e.g. 2013-01-02T13:23:37) or     從時間戳開始显示
                       relative (e.g. 42m for 42 minutes)
      --tail string    Number of lines to show from the end of the logs (default   日誌显示行數
                       "all")
  -t, --timestamps     Show timestamps                                             显示時間戳
      --until string   Show logs before a timestamp (e.g. 2013-01-02T13:23:37)     在時間戳之前显示日誌
                       or relative (e.g. 42m for 42 minutes)

查看容器中進程信息

docker top CONTAINER [ps OPTIONS]

[root@hwh1 ~]# docker top --help 
Usage:	docker top CONTAINER [ps OPTIONS]
Display the running processes of a container

# docker top 容器id
[root@hwh1 ~]# docker top 147f08710d27
UID                 PID                 PPID                C                   STIME   
root                76123               76105               0                   21:13  

查看鏡像的元數據

docker inspect [OPTIONS] NAME|ID [NAME|ID...]

[root@hwh1 ~]# docker inspect --help 
Usage:	docker inspect [OPTIONS] NAME|ID [NAME|ID...]
Return low-level information on Docker objects
Options:
  -f, --format string   Format the output using the given Go template          用 Go 模板打印出一個圖像
  -s, --size            Display total file sizes if the type is container      如果類型是容器的話,就显示容器大小
      --type string     Return JSON for specified type                         返回指定類型的 JSON 字符串

# 查看 centos 的元數據
[root@hwh1 ~]# docker inspect 147f08710d27
[
    {
        "Id": "147f08710d2732d81ee9ce2680a7cfad48cbd186e87e27b081d82c103a29f084",
        "Created": "2020-06-15T13:13:13.783652979Z",
        "Path": "/bin/bash",
        "Args": [],
        "State": {
            "Status": "running",
            "Running": true,
            "Paused": false,
            "Restarting": false,
            "OOMKilled": false,
            "Dead": false,
            "Pid": 76123,
            "ExitCode": 0,
            "Error": "",
            "StartedAt": "2020-06-15T13:13:15.632825635Z",
            "FinishedAt": "0001-01-01T00:00:00Z"
        },
        "Image": "sha256:470671670cac686c7cf0081e0b37da2e9f4f768ddc5f6a26102ccd1c6954c1ee",
        "ResolvConfPath": "/var/lib/docker/containers/147f08710d2732d81ee9ce2680a7cfad48cbd186e87e27b081d82c103a29f084/resolv.conf",
        "HostnamePath": "/var/lib/docker/containers/147f08710d2732d81ee9ce2680a7cfad48cbd186e87e27b081d82c103a29f084/hostname",
        "HostsPath": "/var/lib/docker/containers/147f08710d2732d81ee9ce2680a7cfad48cbd186e87e27b081d82c103a29f084/hosts",
        "LogPath": "/var/lib/docker/containers/147f08710d2732d81ee9ce2680a7cfad48cbd186e87e27b081d82c103a29f084/147f08710d2732d81ee9ce2680a7cfad48cbd186e87e27b081d82c103a29f084-json.log",
        "Name": "/dazzling_benz",
        "RestartCount": 0,
        "Driver": "overlay2",
        "Platform": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "AppArmorProfile": "",
        "ExecIDs": null,
        "HostConfig": {
            "Binds": null,
            "ContainerIDFile": "",
            "LogConfig": {
                "Type": "json-file",
                "Config": {}
            },
            "NetworkMode": "default",
            "PortBindings": {},
            "RestartPolicy": {
                "Name": "no",
                "MaximumRetryCount": 0
            },
            "AutoRemove": false,
            "VolumeDriver": "",
            "VolumesFrom": null,
            "CapAdd": null,
            "CapDrop": null,
            "Capabilities": null,
            "Dns": [],
            "DnsOptions": [],
            "DnsSearch": [],
            "ExtraHosts": null,
            "GroupAdd": null,
            "IpcMode": "private",
            "Cgroup": "",
            "Links": null,
            "OomScoreAdj": 0,
            "PidMode": "",
            "Privileged": false,
            "PublishAllPorts": false,
            "ReadonlyRootfs": false,
            "SecurityOpt": null,
            "UTSMode": "",
            "UsernsMode": "",
            "ShmSize": 67108864,
            "Runtime": "runc",
            "ConsoleSize": [
                0,
                0
            ],
            "Isolation": "",
            "CpuShares": 0,
            "Memory": 0,
            "NanoCpus": 0,
            "CgroupParent": "",
            "BlkioWeight": 0,
            "BlkioWeightDevice": [],
            "BlkioDeviceReadBps": null,
            "BlkioDeviceWriteBps": null,
            "BlkioDeviceReadIOps": null,
            "BlkioDeviceWriteIOps": null,
            "CpuPeriod": 0,
            "CpuQuota": 0,
            "CpuRealtimePeriod": 0,
            "CpuRealtimeRuntime": 0,
            "CpusetCpus": "",
            "CpusetMems": "",
            "Devices": [],
            "DeviceCgroupRules": null,
            "DeviceRequests": null,
            "KernelMemory": 0,
            "KernelMemoryTCP": 0,
            "MemoryReservation": 0,
            "MemorySwap": 0,
            "MemorySwappiness": null,
            "OomKillDisable": false,
            "PidsLimit": null,
            "Ulimits": null,
            "CpuCount": 0,
            "CpuPercent": 0,
            "IOMaximumIOps": 0,
            "IOMaximumBandwidth": 0,
            "MaskedPaths": [
                "/proc/asound",
                "/proc/acpi",
                "/proc/kcore",
                "/proc/keys",
                "/proc/latency_stats",
                "/proc/timer_list",
                "/proc/timer_stats",
                "/proc/sched_debug",
                "/proc/scsi",
                "/sys/firmware"
            ],
            "ReadonlyPaths": [
                "/proc/bus",
                "/proc/fs",
                "/proc/irq",
                "/proc/sys",
                "/proc/sysrq-trigger"
            ]
        },
        "GraphDriver": {
            "Data": {
                "LowerDir": "/var/lib/docker/overlay2/74794286462edce8a73f8e74239c0229d6cec3afac92f052951245d91e05c7cd-init/diff:/var/lib/docker/overlay2/ae0a1afad34903571dd0df8a39bc4bea93ccd793ae2f6185fa95385c18d56f05/diff",
                "MergedDir": "/var/lib/docker/overlay2/74794286462edce8a73f8e74239c0229d6cec3afac92f052951245d91e05c7cd/merged",
                "UpperDir": "/var/lib/docker/overlay2/74794286462edce8a73f8e74239c0229d6cec3afac92f052951245d91e05c7cd/diff",
                "WorkDir": "/var/lib/docker/overlay2/74794286462edce8a73f8e74239c0229d6cec3afac92f052951245d91e05c7cd/work"
            },
            "Name": "overlay2"
        },
        "Mounts": [],
        "Config": {
            "Hostname": "147f08710d27",
            "Domainname": "",
            "User": "",
            "AttachStdin": true,
            "AttachStdout": true,
            "AttachStderr": true,
            "Tty": true,
            "OpenStdin": true,
            "StdinOnce": true,
            "Env": [
                "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
            ],
            "Cmd": [
                "/bin/bash"
            ],
            "Image": "centos",
            "Volumes": null,
            "WorkingDir": "",
            "Entrypoint": null,
            "OnBuild": null,
            "Labels": {
                "org.label-schema.build-date": "20200114",
                "org.label-schema.license": "GPLv2",
                "org.label-schema.name": "CentOS Base Image",
                "org.label-schema.schema-version": "1.0",
                "org.label-schema.vendor": "CentOS",
                "org.opencontainers.image.created": "2020-01-14 00:00:00-08:00",
                "org.opencontainers.image.licenses": "GPL-2.0-only",
                "org.opencontainers.image.title": "CentOS Base Image",
                "org.opencontainers.image.vendor": "CentOS"
            }
        },
        "NetworkSettings": {
            "Bridge": "",
            "SandboxID": "dcbcaf21dc6395481ce4c27bd58e83b306aee13216f852b4ac92edab13dc6698",
            "HairpinMode": false,
            "LinkLocalIPv6Address": "",
            "LinkLocalIPv6PrefixLen": 0,
            "Ports": {},
            "SandboxKey": "/var/run/docker/netns/dcbcaf21dc63",
            "SecondaryIPAddresses": null,
            "SecondaryIPv6Addresses": null,
            "EndpointID": "1b8456cbbb162e74762144d5a13305ba84acb45db92ce2467c0bc15724077b72",
            "Gateway": "172.17.0.1",
            "GlobalIPv6Address": "",
            "GlobalIPv6PrefixLen": 0,
            "IPAddress": "172.17.0.2",
            "IPPrefixLen": 16,
            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:02",
            "Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "23077e8fffbf9407b9d83e492e05cc11904b4dbf7fd3ab3a4b84c36c1a7ee4a5",
                    "EndpointID": "1b8456cbbb162e74762144d5a13305ba84acb45db92ce2467c0bc15724077b72",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }
        }
    }
]

進入當前正在運行的容器

# 我們通常容器都是使用後台方式運行的,需要進入容器,修改一些配置
# 方式一 :docker exec -it 容器id bashShell
# 進入容器后開啟一個新的終端,可以在裏面操作(常用)
# docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

[root@hwh1 ~]# docker exec --help 
Usage:	docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
Run a command in a running container
Options:
  -d, --detach               Detached mode: run command in the background             在後台運行命令
      --detach-keys string   Override the key sequence for detaching a container      重寫用於分離容器的鍵序列
  -e, --env list             Set environment variables                                設置環境變量
  -i, --interactive          Keep STDIN open even if not attached                     即使沒有連接,也保持STDIN打開
      --privileged           Give extended privileges to the command                  授予命令擴展權限
  -t, --tty                  Allocate a pseudo-TTY                                    分配一個偽TTY
  -u, --user string          Username or UID (format: <name|uid>[:<group|gid>])       用戶名或者 id
  -w, --workdir string       Working directory inside the container                   容器內的工作目錄
  

[root@hwh1 ~]# docker exec -it a41c80fd6d1c /bin/bash
[root@a41c80fd6d1c /]# ls
bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr


# 方式二 :docker attach 容器id
# 進入容器正在執行的終端,不會啟動新的終端
# docker attach [OPTIONS] CONTAINER

[root@hwh1 ~]# docker attach --help 
Usage:	docker attach [OPTIONS] CONTAINER
Attach local standard input, output, and error streams to a running container
Options:
      --detach-keys string   Override the key sequence for detaching a container       重寫用於分離容器的鍵序列
      --no-stdin             Do not attach STDIN                                       不要附加STDIN
      --sig-proxy            Proxy all received signals to the process (default true)  將所有接收到的信號代理到進程(默認為true)


[root@hwh1 ~]# docker attach a41c80fd6d1c
[root@a41c80fd6d1c /]# ls
bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr

拷貝文件

# 從容器被拷貝文件到主機上
# docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-               docker cp 容器id:容器內路徑 目的的主機路徑

# 從主機上拷貝文件到容器
# docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH               docker cp 主機路徑 容器id:目的的容器內路徑

[root@hwh1 ~]# docker cp --help 
Usage:	docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
    	docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH
Copy files/folders between a container and the local filesystem

Use '-' as the source to read a tar archive from stdin
and extract it to a directory destination in a container.
Use '-' as the destination to stream a tar archive of a
container source to stdout.

Options:
  -a, --archive       Archive mode (copy all uid/gid information)  存檔模式(複製所有uid/gid信息)
  -L, --follow-link   Always follow symbol link in SRC_PATH        始終遵循容器內路徑中的符號鏈接

# 從容器被拷貝文件到主機上
[root@hwh1 home]# docker attach a41c80fd6d1c
[root@a41c80fd6d1c /]# cd /home
[root@a41c80fd6d1c home]# ls
[root@a41c80fd6d1c home]# touch hwh.java               # 在 home 目錄下創建一個  hwh.java
[root@a41c80fd6d1c home]# ls
hwh.java
[root@hwh1 home]# ls
hwh  hwh1  hwh2  user01  user02
[root@hwh1 home]# docker cp a41c80fd6d1c:/home/hwh.java /home           # 將 hwh.java 複製到主機上
[root@hwh1 home]# ls
hwh  hwh1  hwh2  hwh.java  user01  user02

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

※教你寫出一流的銷售文案?

※超省錢租車方案

菲南民答那峨島規模6.3強震

摘錄自2019年10月17日中央社報導

菲律賓南部民答那峨島北可塔巴托省(North Cotabato)杜路南鎮(Tulunan)東南方約22公里處,16日7時37分發晚間發生規模6.3強震,震源深度僅15公里,附近省份都感受到地震震波。已知造成2人死亡,至少20多人受傷。ABS-CBN新聞網報導,根據菲律賓火山暨地震研究所(Phivolcs)資訊,這起地震沒有海嘯風險。美國地質研究所測得地震規模為6.4。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

※教你寫出一流的銷售文案?

※超省錢租車方案

Model S 買氣縮 特斯拉急推租賃促銷方案

美國豪華電動車製造商特斯拉 (Tesla) 執行長 Elon Musk 於 10 月 25 日透過官網宣佈美國專屬的「Model S」電動轎車月租金優惠,可將價格下砍最多 25%,另外還提供客戶 90 天的試用期,車主若不滿意可立即退貨。   Musk 25 日表示,資金成本遠低於特斯拉的 US Bank 現在將為特斯拉車主提供融資租賃優惠,一台全新的 Model S 每個月的租金可因此減少最多 25%。另外,特斯拉將開始為租車的客戶提供滿意保證,若車主在把 Model S 開回家後覺得不滿意,只要在 3 個月內把車交還,特斯拉就會解除雙方的租賃義務。   Model S 現在一台的售價介於 71,000 美元至超過 100,000 美元之間,而融資租賃方案每個月的租金則介於 777 至 1,271 美元、對特斯拉營收的貢獻度相當高。   不過,根據華爾街日報27日報導,特斯拉的汽車銷售量在美國趨疲,似乎是該公司推出促銷優惠的主因。WardsAuto.com 的數據顯示,2014 年截至 9 月底為止,Model S 僅在美國賣出 10,335 台,較 2013 年同期萎縮 26.3%。WardsAuto 產業分析師 Haig Stoddard 表示,Model S 是一款利基型產品,也許市場需求已經暫時獲滿足,而油價下挫更讓局勢更加惡化。  

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

※教你寫出一流的銷售文案?

※超省錢租車方案

穩當國內新能源車銷售冠軍 比亞迪今年前10月售逾13000輛

10日,比亞迪官方公佈了新能源汽車的銷量情況。比亞迪秦10月銷售1702輛,1-10月累計11175輛。e6電動車銷售199輛,1-10月累計2203輛。今年1-10比亞迪新能源乘用車累計銷量達13378輛,穩居國內新能源汽車銷量冠軍寶座。   受免購置稅政策和電池產能釋放的雙重效應,比亞迪秦9月銷量環比增加29%,其中在上海的上牌量達1212台,上海已成為比亞迪秦在全國最大的市場。10月銷量增長速度放緩,可見目前其電池產能仍不能滿足新能源汽車發展的需求。比亞迪副總經理李雲飛透露,第二個電池廠9月建成後,能逐步消化以前累計近萬輛的秦訂單和新增訂單要求。   面向公共領域的純電動車型e6每月銷量保持在200輛左右。根據比亞迪總裁王傳福公佈的戰略計畫,比亞迪將在e6的基礎上新增E3/E5兩款產品,並推出e6的行政版,主打私家車市場。另外,比亞迪唐插電式混動SUV車型將於12月上市。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

※教你寫出一流的銷售文案?

※超省錢租車方案

中國政策放開電動車准入要求 小米或入局電動車

11月26日,國家發改委網站掛出《新建純電動乘用車生企業投資項目和生產準入管理的暫行規定(徵求意見稿)》(以下簡稱《規定》),計劃為純電動車生準入放開口子。   《規定》要求的三條基礎能力中,最核心的是:(申報企業)有3年以上純電動乘用車的研發基礎,具有專業研發團隊和整車正向研發能力,掌握整車控制系統、動力電池系統、整車整合和整車輕量化方面的核心技術以及相應的試驗驗證能力,擁有純電動乘用車自主智慧財產權和已授權的相關發明專利。另外還要求新建企業只能生產純電動轎車和純電動其他乘用車(包括增程式電動乘用車),插電式混合動力不在準入範圍內。   面對新一批電動車開放名單,包括小米、樂視與萬向等企業集團都展現出高度興趣,爭取成為入圍名單。其中小米的動向最受矚目。小米創辦人之一黎萬強早在10月底就悄悄飛往矽谷展開暖身動作,小米董事長雷軍更在拜會特斯拉後就對電動車念念不忘。事實上,小米電動車的諜照早就在網路上曝光,只是細節外界所知不多。不過,這次開放的限制很嚴,小米能否如願以償擠進電動車窄門,備受關注。   (照片來源: )

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

※教你寫出一流的銷售文案?

※超省錢租車方案

Zookeeper分佈式過程協同技術 – 部署及設置

Zookeeper分佈式過程協同技術 –  部署及設置

Zookeeper支持單機模式、偽集群模式、集群模式三種部署方式。演示部署環境為CentOS、jdk版本為1.8、Zookeeper版本為3.4.9。

單機模式

單機模式適合入門學習使用,只需要一台機器就可以輕鬆搭建Zookeeper服務用於學習和測試。

1. 進入官網下載Zookeeper的JAR包,下載地址:https://zookeeper.apache.org/releases.html。

2. 解壓壓縮包,命令:tar -zxvf zookeeper-3.4.9.tar.gz,解壓后目錄格式如下。

3. 進入conf目錄,複製zoo_sample.cfg文件命名為zoo.cfg。這裏可以直接使用默認的參數,也可以根據自己的需要修改。

命令:cp zoo_sample.cfg zoo.cfg

主要配置參數說明

  • clientPort

客戶端連接的服務器所監聽的TCP端口,默認情況下,服務器會監聽所有的網絡連接的這個端口,除非設置了clientPortAddress參數。客戶端口可以設置為任何值,不同的服務器可以設置不同的端口,默認端口號為2181。

  • tickTime

tickTime的時長單位為毫秒,Zookeeper集群中使用的超時時間單位通過tickTime指定。tickTime設置了超時時間的下限值,因為最小的超時時間為一個tick時間,客戶端最小會話超時時間為2個tick時間。

tickTime的默認值是3000毫秒,更低的tickTime值可以更快地發現超時問題,但也導致更高的網絡流量和更高的CPU使用率。

  • dataDir

dataDir用於配置內存數據庫保存的模糊快照目錄,如果某個服務器為集群中的一台,id文件也保存在該目錄下。

  • dataLogDir

用於配置事務日誌的保存目錄。服務端在確認一個事務前必須將數據同步到存儲中,如果寫入磁盤過於忙碌會影響到寫入的吞吐能力。因此,比較好的方案是使用專用的日誌存儲設備,將dataLogDir目錄配置指向該設備。

  • maxClientCnxns

允許每個IP地址發起socket連接的最大數量。Zookeeper通過流量控制和限制值來避免過載情況的發生。當某個IP地址的客戶端建立的連接數大於此值時,服務器會拒絕該IP地址新的連接。

  • initLimit

對於追隨者最初連接到群首時的超時時間,單位為tick(tickTime)值的倍數。

當某個追隨者最初與群首建立連接時,它們之間會傳輸相當多的數據,尤其是追隨者落後整體很多時。配置initLimit參數值取決於群首與追隨者之間的網絡傳輸速度以及傳輸數據量的大小。

但是如果設置值過高,在首次連接到故障的服務器就會消耗更多的時間,同時還會消耗更多的恢復時間。因此在實際部署時,最好進行集群間的網絡基準測試來測試出你所期望的時間。

  • syncLimit

對於追隨者與群首進行sync操作時的超時值,單位為tick(tickTime)值的倍數。

追隨者總是會稍落後於群首,如果群首與追隨者無法進行sync操作,而且超過了syncLimit的tick時間,就會放棄該追隨者。

  • leaderServes

配置值為“yes”或“no”標誌,指示群首服務器是否為客戶端提供服務。擔任群首的服務器需要做很多工作,它需要與所有的追隨者進行通信並會執行所有的變更操作,這意味着群首的負載會比追隨者高很多,如果群首過載,整個系統都有可能受到影響。

4. 進入bin目錄,可以看到很多sh腳本文件,通過zkServer.sh來啟動zookeeper。

操作命令:

啟動命令:.zkServer.sh start

停止命令:.zkServer.sh stop

重啟命令:.zkServer.sh restart

狀態查看命令:.zkServer.sh status

啟動zookeeper服務后,通過status命令可以看到當前服務狀態、使用的配置文件、運行模式。

 這樣Zookeeper的單機部署模式就已經初步完成了。如果需要修改JVM配置,可以修改zkServver.sh文件中的配置,在如下位置加入你需要的參數。

偽集群部署

 偽集群部署指在一台機器上部署多個Zookeeper服務。

1. 首先將之前配置好的Zookeeper服務目錄另外複製兩份,命名為zookeeper-2和zookeeper-3。

2. 然後分別修改三份的zoo.cfg配置項,添加配置 server.x=[hostname]:n:n[:observer],示例如下。

server.1=localhost:2887:3887

server.2=localhost:2888:3888

server.3=localhost:2889:3889

Zookeeper服務器需要知道它們如何通信,配置文件中該形式的配置項就指定了服務器x的配置信息,其實x為服務器的ID值(一個整數)。當一個服務器啟動后,就會讀取data目錄下myid文件中的值,之後服務器就會使用這個值作為查找server.x項,通過該項中的數據配置服務器自己。如果需要連接到另外一個服務器y,就會使用server.y項配置信息來與這個服務器進行通信。

hostname為服務器在網絡中的名稱(ip或者主機名),同時後面跟着兩個端口號,第一個端口號用於事務的發送,第二個端口號用於群首選舉。如果最後一個字段標記了observer屬性(選填),服務器就會進入觀察者模式。

三份配置文件的myid和兩個配置端口號以及clientPort不可以重複,因為是在一台機器上部署,生產環境集群部署時可以忽略。最終的配置清單如下:

3. 分別添加myid文件,在data目錄下添加myid文件。

echo ‘1’ > data/myid

4. 分別啟動三個Zookeeper服務,啟動成功后通過status命令可以查看服務的狀態。可以看到目前集群里有一台leader和兩台follower。

集群部署

生產環境的集群部署步驟和偽集群部署並無太多差異,同樣是修改zoo.cfg配置文件並且添加Zookeeper集群信息,集群部署時,客戶端端口號、事務端口號、選舉端口號都可以保持一致。另外集群部署時需要充分考慮集群機器間的網絡情況來制定合理的超時時間設置。

 

本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

※教你寫出一流的銷售文案?

※超省錢租車方案

菲律賓民答那峨島發生規模6.6強震

摘錄自2019年10月16日上報、29日自由時報報導

根據美國地質調查所(USGS)觀測顯示,菲律賓民答那峨島當地時間29日早9時許傳出規模6.6強震。震央位於民答那峨島的達沃市(Davao City)東南方,地震深度僅15.3公里。

截至下午4:00為止,麥格塞塞(Magsaysay)鎮發言人告訴法新社,一名十多歲的男學生逃離校舍時,遭倒下的牆壓死。另有學生在逃出教室時因「踩踏」受傷,所幸保住性命。 科羅納達爾(Koronadal)鎮當局也表示,當地一名66歲男性被倒下的牆壓死。 截至目前至少有50人遭掉落的瓦礫砸傷,包括一所小學的7名師生在逃離校舍時受傷。

本月16日,一場規模6.4的淺層強震才襲擊菲律賓南部,至少1人受傷。根據美國地質調查所,震源深度14公里,震央距離民答那峨島哥倫比歐市(Columbio)約7.7公里。地震發生於當地時間晚間7時37分。其中,基達帕灣市(Kidapawan City)達7級震度,預計仍會有餘震,該市市長宣布17日全面停課。

本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

※教你寫出一流的銷售文案?

※超省錢租車方案

不畏油價跌 美電動車 12 月創最高單月銷售紀錄

儘管美國汽油零售價格跟隨國際原油同步下挫到每加侖 2 美元的低水準,2014 年美國電動車銷售強勁增加 23%,12 月並創下單月最佳紀錄;顯見電動車已蔚為一股持久的趨勢,不受油價影響。   根據電動車專業網站 InsideEVs 統計,2014 年 12 月美國賣出 12,874 輛電動車,為統計以來最高單月銷售紀錄。至於 2014 年全年,電動車銷售勁揚 23%,達到 119,710 輛。   就個別品牌來看,全美電動車銷售冠軍是日產 Leaf,2014 年總計售出 30,200 輛,遙遙領先亞軍通用汽車雪佛蘭 Volt 的 18,805 輛。起價介於 3.5 萬到 4 萬美元的特斯拉 Model S 排名第 3,全年銷量為 17,300 輛,市占不及 15%。不過,在 12 月 Model S 首度擊敗售價較低的日產 Leaf(約 3 萬美元)。   2014 年美國電動車市場唯一新上市車款是 BMW,分別在 5 月及 8 月推出 i3 與 i8 ,加總的銷量僅 6,647 輛。展望 2015 年,將有數款新型電動車上路,尤其是在休旅車和越野車市場。而特斯拉的 Model X 則預計 2015 年下半年登場,是今年最受期待的電動車。

本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

※教你寫出一流的銷售文案?

※超省錢租車方案