fastDFS異常の処理(四)

3238 ワード

fastDFS概要(一)fastDFSサーバのインストール(二)spring boot統合fastDFSおよび入門小Demo(三)fastDFS異常の処理(四)

文書ディレクトリ

  • 一、接続方式の作成による性能への影響
  • 二、getStoreStorage fail,errno code:28
  • 一、接続方式の作成が性能に与える影響


    会社でコンカレントテストをしているときに遭遇した問題は、コンカレント量が10にしか達しず、設計要件(PS:要件20)を満たしていないことです(他のサービスの影響で、コンカレントは高くなく、fastDFSとは関係ありません).私のこのサービスはfastDFSからのアップロードとダウンロードだけに関連しており、処理されていないので、こんなに低い同時実行はできないはずです.その後、問題は登録サービスにあることに気づいた.
    ファイルのアップロード
    	// 
    	@Autowired
        private FastDFSClient fastDFSClient;
    	// 
    		String[] upload_file = fastDFSClient.uploadFile(bytes, extFilename, null);
    

    fastDFS接続の作成
    	public FastDFSClient() throws Exception {
        // PropertieUtil trackerServer 
    		String trackerServer=PropertieUtil.getProperty("application.properties", "trackerServer").replace("\"", "");
    	// fastDFS 
    		ClientGlobal.initByTrackers(trackerServer);
    		trackerClient = new TrackerClient();
    		trackerServer = trackerClient.getConnection();
    		storageServer = null;
        	storageClient = new StorageClient1(trackerServer, storageServer);
        }
    

    パッケージされたプロファイル取得ツールクラス
    public class PropertieUtil {
    	public static String getProperty(String properties, String key) {	
    		Properties pro = new Properties();
    	// 
    		InputStream in = PropertieUtil.class.getClassLoader().getResourceAsStream(properties);
    
    		try {
    	// properties 
    			pro.load(in);
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	// 
    		String property = pro.getProperty(key);
    
    		return property;
    	}
    

    上記のように、アップロードする際には、アップロードサービスを行うだけで使用でき、new登録サービスを毎回行う必要はありません.しかし,このサービスはもう一つのメソッドを呼び出し,反射的にコードを取得することで性能が低下する.登録方式をnewタイプに変更して登録すると,同時問題が解決される.
    ファイルのアップロード
    	// fastDF 
        @Value(value = "${tracker_server}")
        private String tracker_server;
    	//new 
    	FastDFSClient fast = new FastDFSClient(trackerServer);
    	// 
    		String[] upload_file = fast.uploadFile(bytes, extFilename, null);
    

    fastDFS接続の作成
    	public FastDFSClient(@Value(value = "${tracker_server}") String tracker_server) throws Exception {
    	// fastDFS 
            ClientGlobal.initByTrackers(tracker_server);
            trackerClient = new TrackerClient();
            trackerServer = trackerClient.getConnection();
            storageServer = null;
            storageClient = new StorageClient1(trackerServer, storageServer);
        }
    

    二、getStoreStorage fail,errno code:28


    エラーの原因は、trackerを構成するときに構成項目が入っていることです.
    # reserved storage space for system or other applications.
    # if the free(available) space of any stoarge server in
    # a group <= reserved_storage_space,
    # no file can be uploaded to this group.
    # bytes unit can be one of follows:
    ### G or g for gigabyte(GB)
    ### M or m for megabyte(MB)
    ### K or k for kilobyte(KB)
    ### no unit for byte(B)
    ### XX.XX% as ratio such as reserved_storage_space = 10%
    reserved_storage_space = 10%
    

    この構成項目は、storageサービスの予約ディスク領域のサイズを構成する比で、デフォルトは10%です.つまり、ディスク領域が10%未満の場合、trackerはファイルのアップロードを拒否します.
    解決方法:
  • 不要なファイルを削除するには、DFSの削除API削除を呼び出すのが望ましい.DFSはインデックスファイルを維持し、API削除を呼び出すとインデックスファイルとともに削除されるからだ.この方式は慎重に使う.
  • ファイルの削除が許可されていない場合は、ディスクを拡張する必要があります.