diff --git a/eth/api.go b/eth/api.go
index 508070646fbc2add34c902cbe83b665e24a0446c..10588675258d48a9b6d26ceca2e17dc23f2fcb17 100644
--- a/eth/api.go
+++ b/eth/api.go
@@ -26,6 +26,7 @@ import (
 	"math/big"
 	"os"
 	"runtime"
+	"strings"
 	"sync"
 	"time"
 
@@ -46,6 +47,7 @@ import (
 	"github.com/ethereum/go-ethereum/p2p"
 	"github.com/ethereum/go-ethereum/rlp"
 	"github.com/ethereum/go-ethereum/rpc"
+	"github.com/syndtr/goleveldb/leveldb"
 	"golang.org/x/net/context"
 )
 
@@ -1566,6 +1568,22 @@ func NewPrivateDebugAPI(config *core.ChainConfig, eth *Ethereum) *PrivateDebugAP
 	return &PrivateDebugAPI{config: config, eth: eth}
 }
 
+// ChaindbProperty returns leveldb properties of the chain database.
+func (api *PrivateDebugAPI) ChaindbProperty(property string) (string, error) {
+	ldb, ok := api.eth.chainDb.(interface {
+		LDB() *leveldb.DB
+	})
+	if !ok {
+		return "", fmt.Errorf("chaindbProperty does not work for memory databases")
+	}
+	if property == "" {
+		property = "leveldb.stats"
+	} else if !strings.HasPrefix(property, "leveldb.") {
+		property = "leveldb." + property
+	}
+	return ldb.LDB().GetProperty(property)
+}
+
 // BlockTraceResults is the returned value when replaying a block to check for
 // consensus results and full VM trace logs for all included transactions.
 type BlockTraceResult struct {
diff --git a/rpc/javascript.go b/rpc/javascript.go
index d6ffcdf222108ebc41f8159f4295ae2d088e09c7..166a5289c971c068950b355bbfd08a2e0e77994b 100644
--- a/rpc/javascript.go
+++ b/rpc/javascript.go
@@ -295,6 +295,12 @@ web3._extend({
 			call: 'debug_dumpBlock',
 			params: 1
 		}),
+		new web3._extend.Method({
+			name: 'chaindbProperty',
+			call: 'debug_chaindbProperty',
+			params: 1,
+			outputFormatter: console.log
+		}),
 		new web3._extend.Method({
 			name: 'metrics',
 			call: 'debug_metrics',